svncommit
2008-04-15 d9344fc349e8c5765898c90bf5061e56cd21c8a0
HTML editing fixes, upgrade to TinyMCE v3.0.6

133 files deleted
32 files renamed
52 files modified
75 files added
32063 ■■■■■ changed files
CHANGELOG 4 ●●●● patch | view | raw | blame | history
program/js/app.js 21 ●●●●● patch | view | raw | blame | history
program/js/editor.js 32 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/blank.htm 9 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/langs/en.js 195 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/langs/readme.txt 9 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/license.txt patch | view | raw | blame | history
program/js/tiny_mce/plugins/cleanup/editor_plugin.js patch | view | raw | blame | history
program/js/tiny_mce/plugins/cleanup/editor_plugin_src.js 10 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/cleanup/readme.txt 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/compat2x/editor_plugin.js 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/compat2x/editor_plugin_src.js 613 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/contextmenu/editor_plugin.js 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/contextmenu/editor_plugin_src.js 97 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/directionality/editor_plugin.js 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/directionality/editor_plugin_src.js 79 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/editor_plugin_src.js 71 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/emotions.htm 43 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/images/emotions.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/images/readme.txt 2 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-cool.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-embarassed.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-innocent.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-kiss.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-sealed.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-surprised.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-undecided.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/img/smiley-yell.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/js/emotions.js 22 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/jscripts/functions.js 21 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/langs/en.js 22 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/langs/en_dlg.js 20 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/emotions/readme.txt 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/css/content.css 32 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/css/media.css patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/editor_plugin_src.js 677 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/images/media.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/flash.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/flv_player.swf patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/quicktime.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/realmedia.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/shockwave.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/trans.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/img/windowsmedia.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/js/embed.js patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/js/media.js 99 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/langs/en.js 94 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/langs/en_dlg.js 103 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/media.htm 347 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/nonbreaking/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/nonbreaking/editor_plugin_src.js 80 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/nonbreaking/images/nonbreaking.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/nonbreaking/langs/en.js 5 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/blank.htm 22 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/css/blank.css 14 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/css/pasteword.css 3 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/editor_plugin.js 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/editor_plugin_src.js 387 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/js/pastetext.js 42 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/js/pasteword.js 56 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/langs/en_dlg.js 5 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/pastetext.htm 34 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/paste/pasteword.htm 29 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/readme.txt 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/css/searchreplace.css 16 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/editor_plugin_src.js 197 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/images/replace.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/images/replace_all_button_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/images/replace_button_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/images/search.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js 117 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/jscripts/searchreplace.js 86 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/langs/en.js 21 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/langs/en_dlg.js 16 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/readme.txt 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/searchreplace/searchreplace.htm 56 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/changelog 11 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/classes/TinyGoogleSpell.class.php 107 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/classes/TinyPspell.class.php 64 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/classes/TinyPspellShell.class.php 121 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/config.php 26 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/css/content.css 6 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/css/spellchecker.css 34 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js 784 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/images/spellchecker.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/img/wline.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/langs/en.js 15 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/spellchecker/tinyspell.php 142 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/cell.htm 102 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/css/cell.css patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/css/row.css patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/css/table.css 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/editor_plugin_src.js 507 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/buttons.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_cell_props.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_delete.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_delete_col.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_delete_row.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_insert_col_after.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_insert_col_before.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_insert_row_after.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_insert_row_before.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_merge_cells.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_row_props.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/images/table_split_cells.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/js/cell.js 94 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/js/merge_cells.js 29 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/js/row.js 84 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/js/table.js 212 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/jscripts/merge_cells.js 24 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/langs/en.js 79 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/langs/en_dlg.js 74 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/merge_cells.htm 28 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/readme.txt 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/row.htm 90 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/table.htm 131 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/visualchars/editor_plugin.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/visualchars/editor_plugin_src.js 104 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/visualchars/images/visualchars.gif patch | view | raw | blame | history
program/js/tiny_mce/plugins/visualchars/langs/en.js 5 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/abbr.htm 149 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/acronym.htm 149 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/attributes.htm 154 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/cite.htm 149 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/css/attributes.css 11 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/css/popup.css 9 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/css/xhtmlxtras.css 24 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/del.htm 170 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/editor_plugin.js 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js 134 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/ins.htm 170 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/abbr.js 25 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/acronym.js 25 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/attributes.js 123 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/cite.js 25 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/del.js 50 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/element_common.js 221 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/js/ins.js 49 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js 32 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/about.htm 34 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/anchor.htm 23 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/charmap.htm 19 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/color_picker.htm 34 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/css/editor_content.css 58 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/css/editor_popup.css 331 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/about.htm 31 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/common_buttons.htm 162 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm 45 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/images/insert_link_window.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/index.htm 27 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm 32 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/insert_image_button.htm 65 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/insert_link_button.htm 33 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/insert_table_button.htm 71 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/docs/en/style.css 28 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/editor_template.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/editor_template_src.js 2404 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/image.htm 86 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/anchor.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/backcolor.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bold.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bold_de_se.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bold_es.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bold_fr.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bold_ru.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bold_tw.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/browse.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/bullist.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/button_menu.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/buttons.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/cancel_button_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/charmap.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/cleanup.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/close.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/code.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/color.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/copy.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/custom_1.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/cut.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/forecolor.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/help.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/hr.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/image.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/indent.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/insert_button_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/italic.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/italic_de_se.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/italic_es.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/italic_ru.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/italic_tw.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/justifycenter.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/justifyfull.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/justifyleft.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/justifyright.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/link.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/menu_check.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/newdocument.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/numlist.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/opacity.png patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/outdent.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/paste.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/redo.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/removeformat.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/separator.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/statusbar_resize.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/strikethrough.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/sub.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/sup.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/underline.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/underline_es.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/underline_fr.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/underline_ru.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/underline_tw.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/undo.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/unlink.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/visualaid.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/xp/tab_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/xp/tab_end.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/xp/tab_sel_end.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/images/xp/tabs_bg.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/img/colorpicker.jpg patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/img/icons.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/about.js 72 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/anchor.js 37 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/charmap.js 33 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/color_picker.js 31 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/image.js 245 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/link.js 126 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/js/source_editor.js 62 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/jscripts/about.js 75 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/jscripts/anchor.js 74 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/jscripts/image.js 81 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/jscripts/link.js 74 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/jscripts/source_editor.js 59 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/langs/en.js 153 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/langs/en_dlg.js 51 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/link.htm 87 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/content.css 25 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/dialog.css 114 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/img/buttons.png patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/img/items.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/img/menu_check.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/img/progress.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/img/tabs.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/default/ui.css 211 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/content.css 25 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/dialog.css 113 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/ui.css 211 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/ui_black.css 8 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css 5 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/source_editor.htm 20 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/editor_template.js 1 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/editor_template_src.js 85 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/img/icons.gif patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/langs/en.js 11 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/skins/default/content.css 25 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/skins/default/ui.css 32 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/skins/o2k7/content.css 17 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png patch | view | raw | blame | history
program/js/tiny_mce/themes/simple/skins/o2k7/ui.css 35 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/tiny_mce.js 2 ●●● patch | view | raw | blame | history
program/js/tiny_mce/tiny_mce_popup.js 487 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/tiny_mce_src.js 17155 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/editable_selects.js 12 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/form_utils.js 73 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/mclayer.js 210 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/mctabs.js 26 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/validate.js 8 ●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 19 ●●●● patch | view | raw | blame | history
program/steps/settings/edit_identity.inc 12 ●●●●● patch | view | raw | blame | history
CHANGELOG
@@ -1,6 +1,10 @@
CHANGELOG RoundCube Webmail
---------------------------
2008/04/15 (estadtherr)
----------
- HTML editing is now working with PHP5 updates and TinyMCE v3.0.6
2008/04/15 (alec)
----------
- Fix remove signature when replying (#1333167)
program/js/app.js
@@ -1897,25 +1897,22 @@
      }
    else
      {
      var eid = tinyMCE.getEditorId('_message');
      // editor is a TinyMCE_Control object
      var editor = tinyMCE.getInstanceById(eid);
      var editor = tinyMCE.get('compose-body');
      // if this is null, we should exit
      if (editor == null) {
      if (editor == null)
        {
        return false;
      }
      var msgDoc = editor.getDoc();
      var msgBody = msgDoc.body;
      if (this.env.signatures && this.env.signatures[id])
        {
        // Append the signature as a span within the body
        var sigElem = msgDoc.getElementById("_rc_sig");
        var sigElem = editor.dom.get("_rc_sig");
        if (!sigElem)
          {
          sigElem = msgDoc.createElement("span");
          sigElem = editor.getDoc().createElement("span");
          sigElem.setAttribute("id", "_rc_sig");
          msgBody.appendChild(sigElem);
          editor.getBody().appendChild(sigElem);
          }
        if (this.env.signatures[id]['is_html'])
          {
@@ -3396,16 +3393,16 @@
    };
  this.toggle_editor = function(checkbox, textElementName)
  this.toggle_editor = function(checkbox, textAreaId)
    {
    var ischecked = checkbox.checked;
    if (ischecked)
      {
        tinyMCE.execCommand('mceAddControl', true, textElementName);
        tinyMCE.execCommand('mceAddControl', true, textAreaId);
      }
    else
      {
        tinyMCE.execCommand('mceRemoveControl', true, textElementName);
        tinyMCE.execCommand('mceRemoveControl', true, textAreaId);
      }
    };
program/js/editor.js
@@ -17,20 +17,20 @@
function rcmail_editor_init(skin_path)
  {
  tinyMCE.init({ mode : 'specific_textareas',
  tinyMCE.init({ mode : "textareas",
                 editor_selector : "mce_editor",
                 accessibility_focus : false,
                 apply_source_formatting : true,
                 theme : 'advanced',
                 plugins : 'emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars',
                 theme_advanced_buttons1 : 'bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media',
                 theme_advanced_buttons2 : '',
                 theme_advanced_buttons3 : '',
                 theme_advanced_toolbar_location : 'top',
                 theme_advanced_toolbar_align : 'left',
                 extended_valid_elements : 'font[face|size|color|style],span[id|class|align|style]',
                 content_css : skin_path + '/editor_content.css',
                 editor_css : skin_path + '/editor_ui.css',
                 external_image_list_url : 'program/js/editor_images.js'
                 theme : "advanced",
                 plugins : "emotions,media,nonbreaking,table,searchreplace,spellchecker,visualchars",
                 theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,bullist,numlist,outdent,indent,separator,link,unlink,emotions,charmap,code,forecolor,backcolor,fontselect,fontsizeselect, separator,undo,redo,image,media,spellchecker",
                 theme_advanced_buttons2 : "",
                 theme_advanced_buttons3 : "",
                 theme_advanced_toolbar_location : "top",
                 theme_advanced_toolbar_align : "left",
                 extended_valid_elements : "font[face|size|color|style],span[id|class|align|style]",
                 content_css : skin_path + "/editor_content.css",
                 external_image_list_url : "editor_images.js"
               });
  }
@@ -80,16 +80,16 @@
    var existingPlainText = composeElement.value;
    var htmlText = "<pre>" + existingPlainText + "</pre>";
    composeElement.value = htmlText;
    tinyMCE.execCommand('mceAddControl', true, '_message');
    tinyMCE.execCommand('mceAddControl', true, 'compose-body');
    htmlFlag.value = "1";
    }
  else
    {
    rcmail.set_busy(true, 'converting');
    var thisMCE = tinyMCE.getInstanceById('_message');
    var existingHtml = tinyMCE.getContent();
    var thisMCE = tinyMCE.get('compose-body');
    var existingHtml = thisMCE.getContent();
    rcmail_html2plain(existingHtml);
    tinyMCE.execCommand('mceRemoveControl', true, '_message');
    tinyMCE.execCommand('mceRemoveControl', true, 'compose-body');
    htmlFlag.value = "0";
    }
  }
program/js/tiny_mce/blank.htm
File was deleted
program/js/tiny_mce/langs/en.js
@@ -1,41 +1,154 @@
// UK lang variables
tinyMCE.addToLang('',{
bold_desc : 'Bold (Ctrl+B)',
italic_desc : 'Italic (Ctrl+I)',
underline_desc : 'Underline (Ctrl+U)',
striketrough_desc : 'Strikethrough',
justifyleft_desc : 'Align left',
justifycenter_desc : 'Align center',
justifyright_desc : 'Align right',
justifyfull_desc : 'Align full',
bullist_desc : 'Unordered list',
numlist_desc : 'Ordered list',
outdent_desc : 'Outdent',
indent_desc : 'Indent',
undo_desc : 'Undo (Ctrl+Z)',
redo_desc : 'Redo (Ctrl+Y)',
link_desc : 'Insert/edit link',
unlink_desc : 'Unlink',
image_desc : 'Insert/edit image',
cleanup_desc : 'Cleanup messy code',
focus_alert : 'A editor instance must be focused before using this command.',
edit_confirm : 'Do you want to use the WYSIWYG mode for this textarea?',
insert_link_title : 'Insert/edit link',
insert : 'Insert',
update : 'Update',
cancel : 'Cancel',
insert_link_url : 'Link URL',
insert_link_target : 'Target',
insert_link_target_same : 'Open link in the same window',
insert_link_target_blank : 'Open link in a new window',
insert_image_title : 'Insert/edit image',
insert_image_src : 'Image URL',
insert_image_alt : 'Image description',
help_desc : 'Help',
bold_img : "bold.gif",
italic_img : "italic.gif",
underline_img : "underline.gif",
clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?',
popup_blocked : 'Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.'
});
tinyMCE.addI18n({en:{
common:{
edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?",
apply:"Apply",
insert:"Insert",
update:"Update",
cancel:"Cancel",
close:"Close",
browse:"Browse",
class_name:"Class",
not_set:"-- Not set --",
clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?",
clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.",
popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.",
invalid_data:"Error: Invalid values entered, these are marked in red.",
more_colors:"More colors"
},
contextmenu:{
align:"Alignment",
left:"Left",
center:"Center",
right:"Right",
full:"Full"
},
insertdatetime:{
date_fmt:"%Y-%m-%d",
time_fmt:"%H:%M:%S",
insertdate_desc:"Insert date",
inserttime_desc:"Insert time",
months_long:"January,February,March,April,May,June,July,August,September,October,November,December",
months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",
day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"
},
print:{
print_desc:"Print"
},
preview:{
preview_desc:"Preview"
},
directionality:{
ltr_desc:"Direction left to right",
rtl_desc:"Direction right to left"
},
layer:{
insertlayer_desc:"Insert new layer",
forward_desc:"Move forward",
backward_desc:"Move backward",
absolute_desc:"Toggle absolute positioning",
content:"New layer..."
},
save:{
save_desc:"Save",
cancel_desc:"Cancel all changes"
},
nonbreaking:{
nonbreaking_desc:"Insert non-breaking space character"
},
iespell:{
iespell_desc:"Run spell checking",
download:"ieSpell not detected. Do you want to install it now?"
},
advhr:{
advhr_desc:"Horizontale rule"
},
emotions:{
emotions_desc:"Emotions"
},
searchreplace:{
search_desc:"Find",
replace_desc:"Find/Replace"
},
advimage:{
image_desc:"Insert/edit image"
},
advlink:{
link_desc:"Insert/edit link"
},
xhtmlxtras:{
cite_desc:"Citation",
abbr_desc:"Abbreviation",
acronym_desc:"Acronym",
del_desc:"Deletion",
ins_desc:"Insertion",
attribs_desc:"Insert/Edit Attributes"
},
style:{
desc:"Edit CSS Style"
},
paste:{
paste_text_desc:"Paste as Plain Text",
paste_word_desc:"Paste from Word",
selectall_desc:"Select All"
},
paste_dlg:{
text_title:"Use CTRL+V on your keyboard to paste the text into the window.",
text_linebreaks:"Keep linebreaks",
word_title:"Use CTRL+V on your keyboard to paste the text into the window."
},
table:{
desc:"Inserts a new table",
row_before_desc:"Insert row before",
row_after_desc:"Insert row after",
delete_row_desc:"Delete row",
col_before_desc:"Insert column before",
col_after_desc:"Insert column after",
delete_col_desc:"Remove column",
split_cells_desc:"Split merged table cells",
merge_cells_desc:"Merge table cells",
row_desc:"Table row properties",
cell_desc:"Table cell properties",
props_desc:"Table properties",
paste_row_before_desc:"Paste table row before",
paste_row_after_desc:"Paste table row after",
cut_row_desc:"Cut table row",
copy_row_desc:"Copy table row",
del:"Delete table",
row:"Row",
col:"Column",
cell:"Cell"
},
autosave:{
unload_msg:"The changes you made will be lost if you navigate away from this page."
},
fullscreen:{
desc:"Toggle fullscreen mode"
},
media:{
desc:"Insert / edit embedded media",
edit:"Edit embedded media"
},
fullpage:{
desc:"Document properties"
},
template:{
desc:"Insert predefined template content"
},
visualchars:{
desc:"Visual control characters on/off."
},
spellchecker:{
desc:"Toggle spellchecker",
menu:"Spellchecker settings",
ignore_word:"Ignore word",
ignore_words:"Ignore all",
langs:"Languages",
wait:"Please wait...",
sug:"Suggestions",
no_sug:"No suggestions",
no_mpell:"No misspellings found."
},
pagebreak:{
desc:"Insert page break."
}}});
program/js/tiny_mce/langs/readme.txt
File was deleted
program/js/tiny_mce/license.txt
program/js/tiny_mce/plugins/cleanup/editor_plugin.js
program/js/tiny_mce/plugins/cleanup/editor_plugin_src.js
File was deleted
program/js/tiny_mce/plugins/cleanup/readme.txt
File was deleted
program/js/tiny_mce/plugins/compat2x/editor_plugin.js
New file
@@ -0,0 +1 @@
(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.Compat2x',{getInfo:function(){return{longname:'Compat2x',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};}});(function(){tinymce.extend(tinyMCE,{addToLang:function(p,l){each(l,function(v,k){tinyMCE.i18n[(tinyMCE.settings.language||'en')+'.'+(p?p+'_':'')+k]=v;});},getInstanceById:function(n){return this.get(n);}});})();(function(){var EditorManager=tinymce.EditorManager;tinyMCE.instances={};tinyMCE.plugins={};tinymce.PluginManager.onAdd.add(function(pm,n,p){tinyMCE.plugins[n]=p;});tinyMCE.majorVersion=tinymce.majorVersion;tinyMCE.minorVersion=tinymce.minorVersion;tinyMCE.releaseDate=tinymce.releaseDate;tinyMCE.baseURL=tinymce.baseURL;tinyMCE.isIE=tinyMCE.isMSIE=tinymce.isIE||tinymce.isOpera;tinyMCE.isMSIE5=tinymce.isIE;tinyMCE.isMSIE5_0=tinymce.isIE;tinyMCE.isMSIE7=tinymce.isIE;tinyMCE.isGecko=tinymce.isGecko;tinyMCE.isSafari=tinymce.isWebKit;tinyMCE.isOpera=tinymce.isOpera;tinyMCE.isMac=false;tinyMCE.isNS7=false;tinyMCE.isNS71=false;tinyMCE.compat=true;TinyMCE_Engine=tinyMCE;tinymce.extend(tinyMCE,{getParam:function(n,dv){return this.activeEditor.getParam(n,dv);},addEvent:function(e,na,f,sc){tinymce.dom.Event.add(e,na,f,sc||this);},getControlHTML:function(n){return EditorManager.activeEditor.controlManager.createControl(n);},loadCSS:function(u){tinymce.DOM.loadCSS(u);},importCSS:function(doc,u){if(doc==document)this.loadCSS(u);else new tinymce.dom.DOMUtils(doc).loadCSS(u);},log:function(){console.debug.apply(console,arguments);},getLang:function(n,dv){var v=EditorManager.activeEditor.getLang(n.replace(/^lang_/g,''),dv);if(/^[0-9\-.]+$/g.test(v))return parseInt(v);return v;},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.execCommand;},triggerNodeChange:function(){EditorManager.activeEditor.nodeChanged();},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);},trim:function(s){return tinymce.trim(s);},xmlEncode:function(s){return tinymce.DOM.encode(s);},explode:function(s,d){var o=[];tinymce.each(s.split(d),function(v){if(v!='')o.push(v);});return o;},switchClass:function(id,cls){var b;if(/^mceButton/.test(cls)){b=EditorManager.activeEditor.controlManager.get(id);if(!b)return;switch(cls){case"mceButtonNormal":b.setDisabled(false);b.setActive(false);return;case"mceButtonDisabled":b.setDisabled(true);return;case"mceButtonSelected":b.setActive(true);b.setDisabled(false);return;}}},addCSSClass:function(e,n,b){return tinymce.DOM.addClass(e,n,b);},hasCSSClass:function(e,n){return tinymce.DOM.hasClass(e,n);},removeCSSClass:function(e,n){return tinymce.DOM.removeClass(e,n);},getCSSClasses:function(){var cl=EditorManager.activeEditor.dom.getClasses(),o=[];each(cl,function(c){o.push(c['class']);});return o;},setWindowArg:function(n,v){EditorManager.activeEditor.windowManager.params[n]=v;},getWindowArg:function(n,dv){var wm=EditorManager.activeEditor.windowManager,v;v=wm.getParam(n);if(v==='')return'';return v||wm.getFeature(n)||dv;},getParentNode:function(n,f){return this._getDOM().getParent(n,f);},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a;},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn);},na?na:[]);},getAttrib:function(e,n,dv){return this._getDOM().getAttrib(e,n,dv);},setAttrib:function(e,n,v){return this._getDOM().setAttrib(e,n,v);},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i];}return o;},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a);}return a;},getContent:function(){return EditorManager.activeEditor.getContent();},getParentElement:function(n,na,f){if(na)na=new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$','g');return this._getDOM().getParent(n,function(n){return n.nodeType==1&&(!na||na.test(n.nodeName))&&(!f||f(n));},this.activeEditor.getBody());},importPluginLanguagePack:function(n){tinymce.PluginManager.requireLangPack(n);},getButtonHTML:function(cn,lang,img,c,u,v){var ed=EditorManager.activeEditor;img=img.replace(/\{\$pluginurl\}/g,tinyMCE.pluginURL);img=img.replace(/\{\$themeurl\}/g,tinyMCE.themeURL);lang=lang.replace(/^lang_/g,'');return ed.controlManager.createButton(cn,{title:lang,command:c,ui:u,value:v,scope:this,'class':'compat',image:img});},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w;}return false;},accessibleEventHandler:function(e){var elm,win=this._win;e=tinymce.isIE?win.event:e;elm=tinymce.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null;}return true;}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null;}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false;}return true;},cancelEvent:function(e){return tinymce.dom.Event.cancel(e);},handleVisualAid:function(e){EditorManager.activeEditor.addVisual(e);},getAbsPosition:function(n,r){return tinymce.DOM.getPos(n,r);},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s;},getVisualAidClass:function(s){return s;},parseStyle:function(s){return this._getDOM().parseStyle(s);},serializeStyle:function(s){return this._getDOM().serializeStyle(s);},openWindow:function(tpl,args){var ed=EditorManager.activeEditor,o={},n;for(n in tpl)o[n]=tpl[n];tpl=o;args=args||{};tpl.url=new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);tpl.inline=tpl.inline||args.inline;ed.windowManager.open(tpl,args);},closeWindow:function(win){EditorManager.activeEditor.windowManager.close(win);},getOuterHTML:function(e){return tinymce.DOM.getOuterHTML(e);},setOuterHTML:function(e,h,d){return tinymce.DOM.setOuterHTML(e,h,d);},hasPlugin:function(n){return tinymce.PluginManager.get(n)!=null;},_setEventsEnabled:function(){},addPlugin:function(pn,f){var t=this;function PluginWrapper(ed){tinyMCE.selectedInstance=ed;ed.onInit.add(function(){t.settings=ed.settings;t.settings['base_href']=tinyMCE.documentBasePath;tinyMCE.settings=t.settings;tinyMCE.documentBasePath=ed.documentBasePath;if(f.initInstance)f.initInstance(ed);ed.contentDocument=ed.getDoc();ed.contentWindow=ed.getWin();ed.undoRedo=ed.undoManager;ed.startContent=ed.getContent({format:'raw'});tinyMCE.instances[ed.id]=ed;tinyMCE.loadedFiles=[];});ed.onActivate.add(function(){tinyMCE.settings=ed.settings;tinyMCE.selectedInstance=ed;});if(f.handleNodeChange){ed.onNodeChange.add(function(ed,cm,n){f.handleNodeChange(ed.id,n,0,0,false,!ed.selection.isCollapsed());});}if(f.onChange){ed.onChange.add(function(ed,n){return f.onChange(ed);});}if(f.cleanup){ed.onGetContent.add(function(){});}this.getInfo=function(){return f.getInfo();};this.createControl=function(n){tinyMCE.pluginURL=tinymce.baseURL+'/plugins/'+pn;tinyMCE.themeURL=tinymce.baseURL+'/themes/'+tinyMCE.activeEditor.settings.theme;if(f.getControlHTML)return f.getControlHTML(n);return null;};this.execCommand=function(cmd,ui,val){if(f.execCommand)return f.execCommand(ed.id,ed.getBody(),cmd,ui,val);return false;};};tinymce.PluginManager.add(pn,PluginWrapper);},_getDOM:function(){return tinyMCE.activeEditor?tinyMCE.activeEditor.dom:tinymce.DOM;},convertRelativeToAbsoluteURL:function(b,u){return new tinymce.util.URI(b).toAbsolute(u);},convertAbsoluteURLToRelativeURL:function(b,u){return new tinymce.util.URI(b).toRelative(u);}});tinymce.extend(tinymce.Editor.prototype,{getFocusElement:function(){return this.selection.getNode();},getData:function(n){if(!this.data)this.data=[];if(!this.data[n])this.data[n]=[];return this.data[n];},hasPlugin:function(n){return this.plugins[n]!=null;},getContainerWin:function(){return window;},getHTML:function(raw){return this.getContent({format:raw?'raw':'html'});},setHTML:function(h){this.setContent(h);},getSel:function(){return this.selection.getSel();},getRng:function(){return this.selection.getRng();},isHidden:function(){var s;if(!tinymce.isGecko)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},translate:function(s){var c=this.settings.language,o;o=tinymce.EditorManager.i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{#'+b+'}';});o=o.replace(/{\$lang_([^}]+)\}/g,function(a,b){return tinymce.EditorManager.i18n[c+'.'+b]||'{$lang_'+b+'}';});return o;},repaint:function(){this.execCommand('mceRepaint');}});tinymce.extend(tinymce.dom.Selection.prototype,{getSelectedText:function(){return this.getContent({format:'text'});},getSelectedHTML:function(){return this.getContent({format:'html'});},getFocusElement:function(){return this.getNode();},selectNode:function(node,collapse,select_text_node,to_start){var t=this;t.select(node,select_text_node||0);if(!is(collapse))collapse=true;if(collapse){if(!is(to_start))to_start=true;t.collapse(to_start);}}});}).call(this);tinymce.PluginManager.add('compat2x',tinymce.plugins.Compat2x);})();
program/js/tiny_mce/plugins/compat2x/editor_plugin_src.js
New file
@@ -0,0 +1,613 @@
/**
 * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;
    tinymce.create('tinymce.plugins.Compat2x', {
        getInfo : function() {
            return {
                longname : 'Compat2x',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',
                version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
            };
        }
    });
    (function() {
        // Extend tinyMCE/EditorManager
        tinymce.extend(tinyMCE, {
            addToLang : function(p, l) {
                each(l, function(v, k) {
                    tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;
                });
            },
            getInstanceById : function(n) {
                return this.get(n);
            }
        });
    })();
    (function() {
        var EditorManager = tinymce.EditorManager;
        tinyMCE.instances = {};
        tinyMCE.plugins = {};
        tinymce.PluginManager.onAdd.add(function(pm, n, p) {
            tinyMCE.plugins[n] = p;
        });
        tinyMCE.majorVersion = tinymce.majorVersion;
        tinyMCE.minorVersion = tinymce.minorVersion;
        tinyMCE.releaseDate = tinymce.releaseDate;
        tinyMCE.baseURL = tinymce.baseURL;
        tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;
        tinyMCE.isMSIE5 = tinymce.isIE;
        tinyMCE.isMSIE5_0 = tinymce.isIE;
        tinyMCE.isMSIE7 = tinymce.isIE;
        tinyMCE.isGecko = tinymce.isGecko;
        tinyMCE.isSafari = tinymce.isWebKit;
        tinyMCE.isOpera = tinymce.isOpera;
        tinyMCE.isMac = false;
        tinyMCE.isNS7 = false;
        tinyMCE.isNS71 = false;
        tinyMCE.compat = true;
        // Extend tinyMCE class
        TinyMCE_Engine = tinyMCE;
        tinymce.extend(tinyMCE, {
            getParam : function(n, dv) {
                return this.activeEditor.getParam(n, dv);
            },
            addEvent : function(e, na, f, sc) {
                tinymce.dom.Event.add(e, na, f, sc || this);
            },
            getControlHTML : function(n) {
                return EditorManager.activeEditor.controlManager.createControl(n);
            },
            loadCSS : function(u) {
                tinymce.DOM.loadCSS(u);
            },
            importCSS : function(doc, u) {
                if (doc == document)
                    this.loadCSS(u);
                else
                    new tinymce.dom.DOMUtils(doc).loadCSS(u);
            },
            log : function() {
                console.debug.apply(console, arguments);
            },
            getLang : function(n, dv) {
                var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);
                // Is number
                if (/^[0-9\-.]+$/g.test(v))
                    return parseInt(v);
                return v;
            },
            isInstance : function(o) {
                return o != null && typeof(o) == "object" && o.execCommand;
            },
            triggerNodeChange : function() {
                EditorManager.activeEditor.nodeChanged();
            },
            regexpReplace : function(in_str, reg_exp, replace_str, opts) {
                var re;
                if (in_str == null)
                    return in_str;
                if (typeof(opts) == "undefined")
                    opts = 'g';
                re = new RegExp(reg_exp, opts);
                return in_str.replace(re, replace_str);
            },
            trim : function(s) {
                return tinymce.trim(s);
            },
            xmlEncode : function(s) {
                return tinymce.DOM.encode(s);
            },
            explode : function(s, d) {
                var o = [];
                tinymce.each(s.split(d), function(v) {
                    if (v != '')
                        o.push(v);
                });
                return o;
            },
            switchClass : function(id, cls) {
                var b;
                if (/^mceButton/.test(cls)) {
                    b = EditorManager.activeEditor.controlManager.get(id);
                    if (!b)
                        return;
                    switch (cls) {
                        case "mceButtonNormal":
                            b.setDisabled(false);
                            b.setActive(false);
                            return;
                        case "mceButtonDisabled":
                            b.setDisabled(true);
                            return;
                        case "mceButtonSelected":
                            b.setActive(true);
                            b.setDisabled(false);
                            return;
                    }
                }
            },
            addCSSClass : function(e, n, b) {
                return tinymce.DOM.addClass(e, n, b);
            },
            hasCSSClass : function(e, n) {
                return tinymce.DOM.hasClass(e, n);
            },
            removeCSSClass : function(e, n) {
                return tinymce.DOM.removeClass(e, n);
            },
            getCSSClasses : function() {
                var cl = EditorManager.activeEditor.dom.getClasses(), o = [];
                each(cl, function(c) {
                    o.push(c['class']);
                });
                return o;
            },
            setWindowArg : function(n, v) {
                EditorManager.activeEditor.windowManager.params[n] = v;
            },
            getWindowArg : function(n, dv) {
                var wm = EditorManager.activeEditor.windowManager, v;
                v = wm.getParam(n);
                if (v === '')
                    return '';
                return v || wm.getFeature(n) || dv;
            },
            getParentNode : function(n, f) {
                return this._getDOM().getParent(n, f);
            },
            selectElements : function(n, na, f) {
                var i, a = [], nl, x;
                for (x=0, na = na.split(','); x<na.length; x++)
                    for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)
                        (!f || f(nl[i])) && a.push(nl[i]);
                return a;
            },
            getNodeTree : function(n, na, t, nn) {
                return this.selectNodes(n, function(n) {
                    return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);
                }, na ? na : []);
            },
            getAttrib : function(e, n, dv) {
                return this._getDOM().getAttrib(e, n, dv);
            },
            setAttrib : function(e, n, v) {
                return this._getDOM().setAttrib(e, n, v);
            },
            getElementsByAttributeValue : function(n, e, a, v) {
                var i, nl = n.getElementsByTagName(e), o = [];
                for (i=0; i<nl.length; i++) {
                    if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)
                        o[o.length] = nl[i];
                }
                return o;
            },
            selectNodes : function(n, f, a) {
                var i;
                if (!a)
                    a = [];
                if (f(n))
                    a[a.length] = n;
                if (n.hasChildNodes()) {
                    for (i=0; i<n.childNodes.length; i++)
                        tinyMCE.selectNodes(n.childNodes[i], f, a);
                }
                return a;
            },
            getContent : function() {
                return EditorManager.activeEditor.getContent();
            },
            getParentElement : function(n, na, f) {
                if (na)
                    na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');
                return this._getDOM().getParent(n, function(n) {
                    return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));
                }, this.activeEditor.getBody());
            },
            importPluginLanguagePack : function(n) {
                tinymce.PluginManager.requireLangPack(n);
            },
            getButtonHTML : function(cn, lang, img, c, u, v) {
                var ed = EditorManager.activeEditor;
                img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);
                img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);
                lang = lang.replace(/^lang_/g, '');
                return ed.controlManager.createButton(cn, {
                    title : lang,
                    command : c,
                    ui : u,
                    value : v,
                    scope : this,
                    'class' : 'compat',
                    image : img
                });
            },
            addSelectAccessibility : function(e, s, w) {
                // Add event handlers
                if (!s._isAccessible) {
                    s.onkeydown = tinyMCE.accessibleEventHandler;
                    s.onblur = tinyMCE.accessibleEventHandler;
                    s._isAccessible = true;
                    s._win = w;
                }
                return false;
            },
            accessibleEventHandler : function(e) {
                var elm, win = this._win;
                e = tinymce.isIE ? win.event : e;
                elm = tinymce.isIE ? e.srcElement : e.target;
                // Unpiggyback onchange on blur
                if (e.type == "blur") {
                    if (elm.oldonchange) {
                        elm.onchange = elm.oldonchange;
                        elm.oldonchange = null;
                    }
                    return true;
                }
                // Piggyback onchange
                if (elm.nodeName == "SELECT" && !elm.oldonchange) {
                    elm.oldonchange = elm.onchange;
                    elm.onchange = null;
                }
                // Execute onchange and remove piggyback
                if (e.keyCode == 13 || e.keyCode == 32) {
                    elm.onchange = elm.oldonchange;
                    elm.onchange();
                    elm.oldonchange = null;
                    tinyMCE.cancelEvent(e);
                    return false;
                }
                return true;
            },
            cancelEvent : function(e) {
                return tinymce.dom.Event.cancel(e);
            },
            handleVisualAid : function(e) {
                EditorManager.activeEditor.addVisual(e);
            },
            getAbsPosition : function(n, r) {
                return tinymce.DOM.getPos(n, r);
            },
            cleanupEventStr : function(s) {
                s = "" + s;
                s = s.replace('function anonymous()\n{\n', '');
                s = s.replace('\n}', '');
                s = s.replace(/^return true;/gi, ''); // Remove event blocker
                return s;
            },
            getVisualAidClass : function(s) {
                // TODO: Implement
                return s;
            },
            parseStyle : function(s) {
                return this._getDOM().parseStyle(s);
            },
            serializeStyle : function(s) {
                return this._getDOM().serializeStyle(s);
            },
            openWindow : function(tpl, args) {
                var ed = EditorManager.activeEditor, o = {}, n;
                // Convert name/value array to object
                for (n in tpl)
                    o[n] = tpl[n];
                tpl = o;
                args = args || {};
                tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);
                tpl.inline = tpl.inline || args.inline;
                ed.windowManager.open(tpl, args);
            },
            closeWindow : function(win) {
                EditorManager.activeEditor.windowManager.close(win);
            },
            getOuterHTML : function(e) {
                return tinymce.DOM.getOuterHTML(e);
            },
            setOuterHTML : function(e, h, d) {
                return tinymce.DOM.setOuterHTML(e, h, d);
            },
            hasPlugin : function(n) {
                return tinymce.PluginManager.get(n) != null;
            },
            _setEventsEnabled : function() {
                // Ignore it!!
            },
            addPlugin : function(pn, f) {
                var t = this;
                function PluginWrapper(ed) {
                    tinyMCE.selectedInstance = ed;
                    ed.onInit.add(function() {
                        t.settings = ed.settings;
                        t.settings['base_href'] = tinyMCE.documentBasePath;
                        tinyMCE.settings = t.settings;
                        tinyMCE.documentBasePath = ed.documentBasePath;
                        //ed.formElement = DOM.get(ed.id);
                        if (f.initInstance)
                            f.initInstance(ed);
                        ed.contentDocument = ed.getDoc();
                        ed.contentWindow = ed.getWin();
                        ed.undoRedo = ed.undoManager;
                        ed.startContent = ed.getContent({format : 'raw'});
                        tinyMCE.instances[ed.id] = ed;
                        tinyMCE.loadedFiles = [];
                    });
                    ed.onActivate.add(function() {
                        tinyMCE.settings = ed.settings;
                        tinyMCE.selectedInstance = ed;
                    });
                /*    if (f.removeInstance) {
                        ed.onDestroy.add(function() {
                            return f.removeInstance(ed.id);
                        });
                    }*/
                    if (f.handleNodeChange) {
                        ed.onNodeChange.add(function(ed, cm, n) {
                            f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());
                        });
                    }
                    if (f.onChange) {
                        ed.onChange.add(function(ed, n) {
                            return f.onChange(ed);
                        });
                    }
                    if (f.cleanup) {
                        ed.onGetContent.add(function() {
                            //f.cleanup(type, content, inst);
                        });
                    }
                    this.getInfo = function() {
                        return f.getInfo();
                    };
                    this.createControl = function(n) {
                        tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;
                        tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;
                        if (f.getControlHTML)
                            return f.getControlHTML(n);
                        return null;
                    };
                    this.execCommand = function(cmd, ui, val) {
                        if (f.execCommand)
                            return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);
                        return false;
                    };
                };
                tinymce.PluginManager.add(pn, PluginWrapper);
            },
            _getDOM : function() {
                return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;
            },
            convertRelativeToAbsoluteURL : function(b, u) {
                return new tinymce.util.URI(b).toAbsolute(u);
            },
            convertAbsoluteURLToRelativeURL : function(b, u) {
                return new tinymce.util.URI(b).toRelative(u);
            }
        });
        // Extend Editor class
        tinymce.extend(tinymce.Editor.prototype, {
            getFocusElement : function() {
                return this.selection.getNode();
            },
            getData : function(n) {
                if (!this.data)
                    this.data = [];
                if (!this.data[n])
                    this.data[n] = [];
                return this.data[n];
            },
            hasPlugin : function(n) {
                return this.plugins[n] != null;
            },
            getContainerWin : function() {
                return window;
            },
            getHTML : function(raw) {
                return this.getContent({ format : raw ? 'raw' : 'html'});
            },
            setHTML : function(h) {
                this.setContent(h);
            },
            getSel : function() {
                return this.selection.getSel();
            },
            getRng : function() {
                return this.selection.getRng();
            },
            isHidden : function() {
                var s;
                if (!tinymce.isGecko)
                    return false;
                s = this.getSel();
                // Weird, wheres that cursor selection?
                return (!s || !s.rangeCount || s.rangeCount == 0);
            },
            translate : function(s) {
                var c = this.settings.language, o;
                o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {
                    return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';
                });
                o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {
                    return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';
                });
                return o;
            },
            repaint : function() {
                this.execCommand('mceRepaint');
            }
        });
        // Extend selection
        tinymce.extend(tinymce.dom.Selection.prototype, {
            getSelectedText : function() {
                return this.getContent({format : 'text'});
            },
            getSelectedHTML : function() {
                return this.getContent({format : 'html'});
            },
            getFocusElement : function() {
                return this.getNode();
            },
            selectNode : function(node, collapse, select_text_node, to_start) {
                var t = this;
                t.select(node, select_text_node || 0);
                if (!is(collapse))
                    collapse = true;
                if (collapse) {
                    if (!is(to_start))
                        to_start = true;
                    t.collapse(to_start);
                }
            }
        });
    }).call(this);
    // Register plugin
    tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);
})();
program/js/tiny_mce/plugins/contextmenu/editor_plugin.js
New file
@@ -0,0 +1 @@
(function(){var Event=tinymce.dom.Event,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.ContextMenu',{init:function(ed){var t=this;t.editor=ed;t.onContextMenu=new tinymce.util.Dispatcher(this);ed.onContextMenu.add(function(ed,e){if(!e.ctrlKey){t._getMenu(ed).showMenu(e.clientX,e.clientY);Event.add(document,'click',hide);Event.cancel(e);}});function hide(){if(t._menu){t._menu.removeAll();t._menu.destroy();Event.remove(document,'click',hide);}};ed.onMouseDown.add(hide);ed.onKeyDown.add(hide);},getInfo:function(){return{longname:'Contextmenu',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_getMenu:function(ed){var t=this,m=t._menu,se=ed.selection,col=se.isCollapsed(),el=se.getNode()||ed.getBody(),am,p1,p2;if(m){m.removeAll();m.destroy();}p1=DOM.getPos(ed.getContentAreaContainer());p2=DOM.getPos(ed.getContainer());m=ed.controlManager.createDropMenu('contextmenu',{offset_x:p1.x,offset_y:p1.y,constrain:1});t._menu=m;m.add({title:'advanced.cut_desc',icon:'cut',cmd:'Cut'}).setDisabled(col);m.add({title:'advanced.copy_desc',icon:'copy',cmd:'Copy'}).setDisabled(col);m.add({title:'advanced.paste_desc',icon:'paste',cmd:'Paste'});if((el.nodeName=='A'&&!ed.dom.getAttrib(el,'name'))||!col){m.addSeparator();m.add({title:'advanced.link_desc',icon:'link',cmd:ed.plugins.advlink?'mceAdvLink':'mceLink',ui:true});m.add({title:'advanced.unlink_desc',icon:'unlink',cmd:'UnLink'});}m.addSeparator();m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();am=m.addMenu({title:'contextmenu.align'});am.add({title:'contextmenu.left',icon:'justifyleft',cmd:'JustifyLeft'});am.add({title:'contextmenu.center',icon:'justifycenter',cmd:'JustifyCenter'});am.add({title:'contextmenu.right',icon:'justifyright',cmd:'JustifyRight'});am.add({title:'contextmenu.full',icon:'justifyfull',cmd:'JustifyFull'});t.onContextMenu.dispatch(t,m,el,col);return m;}});tinymce.PluginManager.add('contextmenu',tinymce.plugins.ContextMenu);})();
program/js/tiny_mce/plugins/contextmenu/editor_plugin_src.js
New file
@@ -0,0 +1,97 @@
/**
 * $Id: editor_plugin_src.js 755 2008-03-29 19:14:42Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;
    tinymce.create('tinymce.plugins.ContextMenu', {
        init : function(ed) {
            var t = this;
            t.editor = ed;
            t.onContextMenu = new tinymce.util.Dispatcher(this);
            ed.onContextMenu.add(function(ed, e) {
                if (!e.ctrlKey) {
                    t._getMenu(ed).showMenu(e.clientX, e.clientY);
                    Event.add(document, 'click', hide);
                    Event.cancel(e);
                }
            });
            function hide() {
                if (t._menu) {
                    t._menu.removeAll();
                    t._menu.destroy();
                    Event.remove(document, 'click', hide);
                }
            };
            ed.onMouseDown.add(hide);
            ed.onKeyDown.add(hide);
        },
        getInfo : function() {
            return {
                longname : 'Contextmenu',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
        },
        _getMenu : function(ed) {
            var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2;
            if (m) {
                m.removeAll();
                m.destroy();
            }
            p1 = DOM.getPos(ed.getContentAreaContainer());
            p2 = DOM.getPos(ed.getContainer());
            m = ed.controlManager.createDropMenu('contextmenu', {
                offset_x : p1.x,
                offset_y : p1.y,
/*                vp_offset_x : p2.x,
                vp_offset_y : p2.y,*/
                constrain : 1
            });
            t._menu = m;
            m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);
            m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);
            m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});
            if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {
                m.addSeparator();
                m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
                m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
            }
            m.addSeparator();
            m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
            m.addSeparator();
            am = m.addMenu({title : 'contextmenu.align'});
            am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});
            am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});
            am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});
            am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});
            t.onContextMenu.dispatch(t, m, el, col);
            return m;
        }
    });
    // Register plugin
    tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);
})();
program/js/tiny_mce/plugins/directionality/editor_plugin.js
New file
@@ -0,0 +1 @@
(function(){tinymce.create('tinymce.plugins.Directionality',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceDirectionLTR',function(){var e=ed.dom.getParent(ed.selection.getNode(),ed.dom.isBlock);if(e){if(ed.dom.getAttrib(e,"dir")!="ltr")ed.dom.setAttrib(e,"dir","ltr");else ed.dom.setAttrib(e,"dir","");}ed.nodeChanged();});ed.addCommand('mceDirectionRTL',function(){var e=ed.dom.getParent(ed.selection.getNode(),ed.dom.isBlock);if(e){if(ed.dom.getAttrib(e,"dir")!="rtl")ed.dom.setAttrib(e,"dir","rtl");else ed.dom.setAttrib(e,"dir","");}ed.nodeChanged();});ed.addButton('ltr',{title:'directionality.ltr_desc',cmd:'mceDirectionLTR'});ed.addButton('rtl',{title:'directionality.rtl_desc',cmd:'mceDirectionRTL'});ed.onNodeChange.add(t._nodeChange,t);},getInfo:function(){return{longname:'Directionality',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var dom=ed.dom,dir;n=dom.getParent(n,dom.isBlock);if(!n){cm.setDisabled('ltr',1);cm.setDisabled('rtl',1);return;}dir=dom.getAttrib(n,'dir');cm.setActive('ltr',dir=="ltr");cm.setDisabled('ltr',0);cm.setActive('rtl',dir=="rtl");cm.setDisabled('rtl',0);}});tinymce.PluginManager.add('directionality',tinymce.plugins.Directionality);})();
program/js/tiny_mce/plugins/directionality/editor_plugin_src.js
New file
@@ -0,0 +1,79 @@
/**
 * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    tinymce.create('tinymce.plugins.Directionality', {
        init : function(ed, url) {
            var t = this;
            t.editor = ed;
            ed.addCommand('mceDirectionLTR', function() {
                var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);
                if (e) {
                    if (ed.dom.getAttrib(e, "dir") != "ltr")
                        ed.dom.setAttrib(e, "dir", "ltr");
                    else
                        ed.dom.setAttrib(e, "dir", "");
                }
                ed.nodeChanged();
            });
            ed.addCommand('mceDirectionRTL', function() {
                var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);
                if (e) {
                    if (ed.dom.getAttrib(e, "dir") != "rtl")
                        ed.dom.setAttrib(e, "dir", "rtl");
                    else
                        ed.dom.setAttrib(e, "dir", "");
                }
                ed.nodeChanged();
            });
            ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});
            ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});
            ed.onNodeChange.add(t._nodeChange, t);
        },
        getInfo : function() {
            return {
                longname : 'Directionality',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
        },
        // Private methods
        _nodeChange : function(ed, cm, n) {
            var dom = ed.dom, dir;
            n = dom.getParent(n, dom.isBlock);
            if (!n) {
                cm.setDisabled('ltr', 1);
                cm.setDisabled('rtl', 1);
                return;
            }
            dir = dom.getAttrib(n, 'dir');
            cm.setActive('ltr', dir == "ltr");
            cm.setDisabled('ltr', 0);
            cm.setActive('rtl', dir == "rtl");
            cm.setDisabled('rtl', 0);
        }
    });
    // Register plugin
    tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);
})();
program/js/tiny_mce/plugins/emotions/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('emotions');var TinyMCE_EmotionsPlugin={getInfo:function(){return{longname:'Emotions',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(cn){switch(cn){case"emotions":return tinyMCE.getButtonHTML(cn,'lang_emotions_desc','{$pluginurl}/images/emotions.gif','mceEmotion')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceEmotion":var template=new Array();template['file']='../../plugins/emotions/emotions.htm';template['width']=250;template['height']=160;template['width']+=tinyMCE.getLang('lang_emotions_delta_width',0);template['height']+=tinyMCE.getLang('lang_emotions_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true}return false}};tinyMCE.addPlugin('emotions',TinyMCE_EmotionsPlugin);
(function(){tinymce.create('tinymce.plugins.EmotionsPlugin',{init:function(ed,url){ed.addCommand('mceEmotion',function(){ed.windowManager.open({file:url+'/emotions.htm',width:250+parseInt(ed.getLang('emotions.delta_width',0)),height:160+parseInt(ed.getLang('emotions.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('emotions',{title:'emotions.emotions_desc',cmd:'mceEmotion'});},getInfo:function(){return{longname:'Emotions',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('emotions',tinymce.plugins.EmotionsPlugin);})();
program/js/tiny_mce/plugins/emotions/editor_plugin_src.js
@@ -1,63 +1,40 @@
/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 * $Id: editor_plugin_src.js 520 2008-01-07 16:30:32Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('emotions');
(function() {
    tinymce.create('tinymce.plugins.EmotionsPlugin', {
        init : function(ed, url) {
            // Register commands
            ed.addCommand('mceEmotion', function() {
                ed.windowManager.open({
                    file : url + '/emotions.htm',
                    width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),
                    height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
// Plucin static class
var TinyMCE_EmotionsPlugin = {
            // Register buttons
            ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});
        },
    getInfo : function() {
        return {
            longname : 'Emotions',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
                version : tinymce.majorVersion + "." + tinymce.minorVersion
        };
    },
    /**
     * Returns the HTML contents of the emotions control.
     */
    getControlHTML : function(cn) {
        switch (cn) {
            case "emotions":
                return tinyMCE.getButtonHTML(cn, 'lang_emotions_desc', '{$pluginurl}/images/emotions.gif', 'mceEmotion');
        }
        return "";
    },
    /**
     * Executes the mceEmotion command.
     */
    execCommand : function(editor_id, element, command, user_interface, value) {
        // Handle commands
        switch (command) {
            case "mceEmotion":
                var template = new Array();
                template['file'] = '../../plugins/emotions/emotions.htm'; // Relative to theme
                template['width'] = 250;
                template['height'] = 160;
                // Language specific width and height addons
                template['width'] += tinyMCE.getLang('lang_emotions_delta_width', 0);
                template['height'] += tinyMCE.getLang('lang_emotions_delta_height', 0);
                tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
                return true;
        }
        // Pass to next handler in chain
        return false;
    }
};
    });
// Register plugin
tinyMCE.addPlugin('emotions', TinyMCE_EmotionsPlugin);
    tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);
})();
program/js/tiny_mce/plugins/emotions/emotions.htm
@@ -1,38 +1,39 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_emotions_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/functions.js"></script>
    <title>{#emotions_dlg.title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/emotions.js"></script>
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body style="display: none">
    <div align="center">
        <div class="title">{$lang_emotions_title}:<br /><br /></div>
        <div class="title">{#emotions_dlg.title}:<br /><br /></div>
        <table border="0" cellspacing="0" cellpadding="4">
          <tr>
            <td><a href="javascript:insertEmotion('smiley-cool.gif','lang_emotions_cool');"><img src="images/smiley-cool.gif" width="18" height="18" border="0" alt="{$lang_emotions_cool}" title="{$lang_emotions_cool}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-cry.gif','lang_emotions_cry');"><img src="images/smiley-cry.gif" width="18" height="18" border="0" alt="{$lang_emotions_cry}" title="{$lang_emotions_cry}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-embarassed.gif','lang_emotions_embarassed');"><img src="images/smiley-embarassed.gif" width="18" height="18" border="0" alt="{$lang_emotions_embarassed}" title="{$lang_emotions_embarassed}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-foot-in-mouth.gif','lang_emotions_foot_in_mouth');"><img src="images/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{$lang_emotions_foot_in_mouth}" title="{$lang_emotions_foot_in_mouth}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>
          </tr>
          <tr>
            <td><a href="javascript:insertEmotion('smiley-frown.gif','lang_emotions_frown');"><img src="images/smiley-frown.gif" width="18" height="18" border="0" alt="{$lang_emotions_frown}" title="{$lang_emotions_frown}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-innocent.gif','lang_emotions_innocent');"><img src="images/smiley-innocent.gif" width="18" height="18" border="0" alt="{$lang_emotions_innocent}" title="{$lang_emotions_innocent}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-kiss.gif','lang_emotions_kiss');"><img src="images/smiley-kiss.gif" width="18" height="18" border="0" alt="{$lang_emotions_kiss}" title="{$lang_emotions_kiss}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-laughing.gif','lang_emotions_laughing');"><img src="images/smiley-laughing.gif" width="18" height="18" border="0" alt="{$lang_emotions_laughing}" title="{$lang_emotions_laughing}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>
          </tr>
          <tr>
            <td><a href="javascript:insertEmotion('smiley-money-mouth.gif','lang_emotions_money_mouth');"><img src="images/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{$lang_emotions_money_mouth}" title="{$lang_emotions_money_mouth}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-sealed.gif','lang_emotions_sealed');"><img src="images/smiley-sealed.gif" width="18" height="18" border="0" alt="{$lang_emotions_sealed}" title="{$lang_emotions_sealed}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-smile.gif','lang_emotions_smile');"><img src="images/smiley-smile.gif" width="18" height="18" border="0" alt="{$lang_emotions_smile}" title="{$lang_emotions_smile}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-surprised.gif','lang_emotions_surprised');"><img src="images/smiley-surprised.gif" width="18" height="18" border="0" alt="{$lang_emotions_surprised}" title="{$lang_emotions_surprised}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>
          </tr>
          <tr>
            <td><a href="javascript:insertEmotion('smiley-tongue-out.gif','lang_emotions_tongue_out');"><img src="images/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{$lang_emotions_tongue-out}" title="{$lang_emotions_tongue_out}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-undecided.gif','lang_emotions_undecided');"><img src="images/smiley-undecided.gif" width="18" height="18" border="0" alt="{$lang_emotions_undecided}" title="{$lang_emotions_undecided}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-wink.gif','lang_emotions_wink');"><img src="images/smiley-wink.gif" width="18" height="18" border="0" alt="{$lang_emotions_wink}" title="{$lang_emotions_wink}" /></a></td>
            <td><a href="javascript:insertEmotion('smiley-yell.gif','lang_emotions_yell');"><img src="images/smiley-yell.gif" width="18" height="18" border="0" alt="{$lang_emotions_yell}" title="{$lang_emotions_yell}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>
            <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>
          </tr>
        </table>
    </div>
program/js/tiny_mce/plugins/emotions/images/emotions.gif
Binary files differ
program/js/tiny_mce/plugins/emotions/images/readme.txt
File was deleted
program/js/tiny_mce/plugins/emotions/img/smiley-cool.gif

program/js/tiny_mce/plugins/emotions/img/smiley-cry.gif

program/js/tiny_mce/plugins/emotions/img/smiley-embarassed.gif

program/js/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif

program/js/tiny_mce/plugins/emotions/img/smiley-frown.gif

program/js/tiny_mce/plugins/emotions/img/smiley-innocent.gif

program/js/tiny_mce/plugins/emotions/img/smiley-kiss.gif

program/js/tiny_mce/plugins/emotions/img/smiley-laughing.gif

program/js/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif

program/js/tiny_mce/plugins/emotions/img/smiley-sealed.gif

program/js/tiny_mce/plugins/emotions/img/smiley-smile.gif

program/js/tiny_mce/plugins/emotions/img/smiley-surprised.gif

program/js/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif

program/js/tiny_mce/plugins/emotions/img/smiley-undecided.gif

program/js/tiny_mce/plugins/emotions/img/smiley-wink.gif

program/js/tiny_mce/plugins/emotions/img/smiley-yell.gif

program/js/tiny_mce/plugins/emotions/js/emotions.js
New file
@@ -0,0 +1,22 @@
tinyMCEPopup.requireLangPack();
var EmotionsDialog = {
    init : function(ed) {
        tinyMCEPopup.resizeToInnerSize();
    },
    insert : function(file, title) {
        var ed = tinyMCEPopup.editor, dom = ed.dom;
        tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {
            src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,
            alt : ed.getLang(title),
            title : ed.getLang(title),
            border : 0
        }));
        tinyMCEPopup.close();
    }
};
tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);
program/js/tiny_mce/plugins/emotions/jscripts/functions.js
File was deleted
program/js/tiny_mce/plugins/emotions/langs/en.js
File was deleted
program/js/tiny_mce/plugins/emotions/langs/en_dlg.js
New file
@@ -0,0 +1,20 @@
tinyMCE.addI18n('en.emotions_dlg',{
title:"Insert emotion",
desc:"Emotions",
cool:"Cool",
cry:"Cry",
embarassed:"Embarassed",
foot_in_mouth:"Foot in mouth",
frown:"Frown",
innocent:"Innocent",
kiss:"Kiss",
laughing:"Laughing",
money_mouth:"Money mouth",
sealed:"Sealed",
smile:"Smile",
surprised:"Surprised",
tongue_out:"Tongue out",
undecided:"Undecided",
wink:"Wink",
yell:"Yell"
});
program/js/tiny_mce/plugins/emotions/readme.txt
File was deleted
program/js/tiny_mce/plugins/media/css/content.css
@@ -1,26 +1,6 @@
.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {
    border: 1px dotted #cc0000;
    background-position: center;
    background-repeat: no-repeat;
    background-color: #ffffcc;
}
.mceItemShockWave {
    background-image: url('../images/shockwave.gif');
}
.mceItemFlash {
    background-image: url('../images/flash.gif');
}
.mceItemQuickTime {
    background-image: url('../images/quicktime.gif');
}
.mceItemWindowsMedia {
    background-image: url('../images/windowsmedia.gif');
}
.mceItemRealMedia {
    background-image: url('../images/realmedia.gif');
}
.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}
.mceItemShockWave {background-image: url(../img/shockwave.gif);}
.mceItemFlash {background-image:url(../img/flash.gif);}
.mceItemQuickTime {background-image:url(../img/quicktime.gif);}
.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}
.mceItemRealMedia {background-image:url(../img/realmedia.gif);}
program/js/tiny_mce/plugins/media/css/media.css
program/js/tiny_mce/plugins/media/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('media');var TinyMCE_MediaPlugin={getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(inst.hasPlugin('flash')&&!tinyMCE.flashWarn){alert('Flash plugin is deprecated and should not be used together with the media plugin.');tinyMCE.flashWarn=true}if(!tinyMCE.settings['media_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/media/css/content.css")},getControlHTML:function(cn){switch(cn){case"media":return tinyMCE.getButtonHTML(cn,'lang_media_desc','{$pluginurl}/images/media.gif','mceMedia')}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceMedia":tinyMCE.openWindow({file:'../../plugins/media/media.htm',width:430+tinyMCE.getLang('lang_media_delta_width',0),height:470+tinyMCE.getLang('lang_media_delta_height',0)},{editor_id:editor_id,inline:"yes"});return true}return false},cleanup:function(type,content,inst){var nl,img,i,ne,d,s,ci;switch(type){case"insert_to_editor":img=tinyMCE.getParam("theme_href")+'/images/spacer.gif';content=content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,'<img class="mceItem$1" title="$2" src="'+img+'" />');content=content.replace(/<object([^>]*)>/gi,'<div class="mceItemObject" $1>');content=content.replace(/<embed([^>]*)>/gi,'<div class="mceItemObjectEmbed" $1>');content=content.replace(/<\/(object|embed)([^>]*)>/gi,'</div>');content=content.replace(/<param([^>]*)>/gi,'<div $1 class="mceItemParam"></div>');content=content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>','gi'),'class="mceItemParam"></div>');break;case"insert_to_editor_dom":d=inst.getDoc();nl=content.getElementsByTagName("img");for(i=0;i<nl.length;i++){if(/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)){nl[i].width=nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g,'$1');nl[i].height=nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g,'$1');}}nl=tinyMCE.selectElements(content,'DIV',function(n){return tinyMCE.hasCSSClass(n,'mceItemObject')});for(i=0;i<nl.length;i++){ci=tinyMCE.getAttrib(nl[i],"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash',d,nl[i]),nl[i]);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave',d,nl[i]),nl[i]);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia',d,nl[i]),nl[i]);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime',d,nl[i]),nl[i]);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia',d,nl[i]),nl[i]);break}}nl=tinyMCE.selectNodes(content,function(n){return n.className=='mceItemObjectEmbed'});for(i=0;i<nl.length;i++){switch(tinyMCE.getAttrib(nl[i],'type')){case'application/x-shockwave-flash':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemFlash');break;case'application/x-director':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemShockWave');break;case'application/x-mplayer2':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemWindowsMedia');break;case'video/quicktime':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemQuickTime');break;case'audio/x-pn-realaudio-plugin':TinyMCE_MediaPlugin._createImgFromEmbed(nl[i],d,'mceItemRealMedia');break}}break;case"get_from_editor":var startPos=-1,endPos,attribs,chunkBefore,chunkAfter,embedHTML,at,pl,cb,mt,ex;while((startPos=content.indexOf('<img',startPos+1))!=-1){endPos=content.indexOf('/>',startPos);attribs=TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos+4,endPos));if(!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))continue;endPos+=2;at=attribs['title'];if(at){at=at.replace(/&(#39|apos);/g,"'");at=at.replace(/&#quot;/g,'"');try{pl=eval('x={'+at+'};')}catch(ex){pl={}}}if(!tinyMCE.getParam('media_use_script',false)){switch(attribs['class']){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166B1BCA-3F9C-11CF-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=tinyMCE.getParam('media_wmp6_compatible')?'05589FA1-C356-11CE-BF01-00AA0055595A':'6BF52A52-394A-11D3-B153-00C04F79FAA6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break}pl.src=tinyMCE.convertURL(pl.src,null,true);embedHTML=TinyMCE_MediaPlugin._getEmbed(ci,cb,mt,pl,attribs)}else{switch(attribs['class']){case'mceItemFlash':s='writeFlash';break;case'mceItemShockWave':s='writeShockWave';break;case'mceItemWindowsMedia':s='writeWindowsMedia';break;case'mceItemQuickTime':s='writeQuickTime';break;case'mceItemRealMedia':s='writeRealMedia';break}if(attribs.width)at=at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g,"width:'"+attribs.width+"'");if(attribs.height)at=at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g,"height:'"+attribs.height+"'");pl.src=tinyMCE.convertURL(pl.src,null,true);at=at.replace(new RegExp("src:'[^']*'","g"),"src:'"+pl.src+"'");embedHTML='<script type="text/javascript">'+s+'({'+at+'});</script>'}chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter}break}return content},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){if(node==null)return;do{if(node.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node,'class'))){tinyMCE.switchClass(editor_id+'_media','mceButtonSelected');return true}}while((node=node.parentNode));tinyMCE.switchClass(editor_id+'_media','mceButtonNormal');return true},_createImgFromEmbed:function(n,d,cl){var ne,at,i,ti='',an;ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;at=n.attributes;for(i=0;i<at.length;i++){if(at[i].specified&&at[i].nodeValue){an=at[i].nodeName.toLowerCase();if(an=='src')continue;if(an=='mce_src')an='src';if(an.indexOf('mce_')==-1&&!new RegExp('^(class|type)$').test(an))ti+=an.toLowerCase()+':\''+at[i].nodeValue+"',"}}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;n.parentNode.replaceChild(ne,n)},_createImg:function(cl,d,n){var i,nl,ti="",an,av,al=new Array();ne=d.createElement('img');ne.src=tinyMCE.getParam("theme_href")+'/images/spacer.gif';ne.width=tinyMCE.getAttrib(n,'width');ne.height=tinyMCE.getAttrib(n,'height');ne.className=cl;al.id=tinyMCE.getAttrib(n,'id');al.name=tinyMCE.getAttrib(n,'name');al.width=tinyMCE.getAttrib(n,'width');al.height=tinyMCE.getAttrib(n,'height');al.bgcolor=tinyMCE.getAttrib(n,'bgcolor');al.align=tinyMCE.getAttrib(n,'align');al.class_name=tinyMCE.getAttrib(n,'mce_class');nl=n.getElementsByTagName('div');for(i=0;i<nl.length;i++){av=tinyMCE.getAttrib(nl[i],'value');av=av.replace(new RegExp('\\\\','g'),'\\\\');av=av.replace(new RegExp('"','g'),'\\"');av=av.replace(new RegExp("'",'g'),"\\'");an=tinyMCE.getAttrib(nl[i],'name');al[an]=av}if(al.movie){al.src=al.movie;al.movie=null}for(an in al){if(al[an]!=null&&typeof(al[an])!="function"&&al[an]!='')ti+=an.toLowerCase()+':\''+al[an]+"',"}ti=ti.length>0?ti.substring(0,ti.length-1):ti;ne.title=ti;return ne},_getEmbed:function(cls,cb,mt,p,at){var h='',n;p.width=at.width?at.width:p.width;p.height=at.height?at.height:p.height;h+='<object classid="clsid:'+cls+'" codebase="'+cb+'"';h+=typeof(p.id)!="undefined"?' id="'+p.id+'"':'';h+=typeof(p.name)!="undefined"?' name="'+p.name+'"':'';h+=typeof(p.width)!="undefined"?' width="'+p.width+'"':'';h+=typeof(p.height)!="undefined"?' height="'+p.height+'"':'';h+=typeof(p.align)!="undefined"?' align="'+p.align+'"':'';h+='>';for(n in p){if(typeof(p[n])!="undefined"&&typeof(p[n])!="function"){h+='<param name="'+n+'" value="'+p[n]+'" />';if(n=='src'&&p[n].indexOf('://')!=-1&&mt=='application/x-mplayer2')h+='<param name="url" value="'+p[n]+'" />'}}h+='<embed type="'+mt+'"';for(n in p){if(typeof(p[n])=="function")continue;if(!(n=='url'&&mt=='application/x-mplayer2'))h+=' '+n+'="'+p[n]+'"'}h+='></embed></object>';return h},_parseAttributes:function(attribute_string){var attributeName="",endChr='"';var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i<attribute_string.length;i++){var chr=attribute_string.charAt(i);if((chr=='"'||chr=="'")&&!withInValue){withInValue=true;endChr=chr}else if(chr==endChr&&withInValue){withInValue=false;var pos=attributeName.lastIndexOf(' ');if(pos!=-1)attributeName=attributeName.substring(pos+1);attributes[attributeName.toLowerCase()]=attributeValue.substring(1);attributeName="";attributeValue=""}else if(!whiteSpaceRegExp.test(chr)&&!withInName&&!withInValue)withInName=true;if(chr=='='&&withInName)withInName=false;if(withInName)attributeName+=chr;if(withInValue)attributeValue+=chr}return attributes}};tinyMCE.addPlugin("media",TinyMCE_MediaPlugin);
(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.MediaPlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;function isMediaElm(n){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);};ed.addCommand('mceMedia',function(){ed.windowManager.open({file:url+'/media.htm',width:430+parseInt(ed.getLang('media.delta_width',0)),height:470+parseInt(ed.getLang('media.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('media',{title:'media.desc',cmd:'mceMedia'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('media',n.nodeName=='IMG'&&isMediaElm(n));});ed.onInit.add(function(){var lo={mceItemFlash:'flash',mceItemShockWave:'shockwave',mceItemWindowsMedia:'windowsmedia',mceItemQuickTime:'quicktime',mceItemRealMedia:'realmedia'};if(ed.settings.content_css!==false)ed.dom.loadCSS(url+"/css/content.css");if(ed.theme.onResolveName){ed.theme.onResolveName.add(function(th,o){if(o.name=='img'){each(lo,function(v,k){if(ed.dom.hasClass(o.node,k)){o.name=v;o.title=ed.dom.getAttrib(o.node,'title');return false;}});}});}if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){if(e.nodeName=='IMG'&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)){m.add({title:'media.edit',icon:'media',cmd:'mceMedia'});}});}});ed.onBeforeSetContent.add(function(ed,o){var h=o.content;h=h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(a,b,c){var o=t._parse(c);return'<img class="mceItem'+b+'" title="'+ed.dom.encode(c)+'" src="'+url+'/img/trans.gif" width="'+o.width+'" height="'+o.height+'" />'});h=h.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');h=h.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');h=h.replace(/<\/(object|embed)([^>]*)>/gi,'</span>');h=h.replace(/<param([^>]*)>/gi,function(a,b){return'<span '+b.replace(/value=/gi,'_value=')+' class="mceItemParam"></span>'});h=h.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');o.content=h;});ed.onSetContent.add(function(){t._spansToImgs(ed.getBody());});ed.onPreProcess.add(function(ed,o){var dom=ed.dom;if(o.set){t._spansToImgs(o.node);each(dom.select('IMG',o.node),function(n){var p;if(isMediaElm(n)){p=t._parse(n.title);dom.setAttrib(n,'width',dom.getAttrib(n,'width',p.width||100));dom.setAttrib(n,'height',dom.getAttrib(n,'height',p.height||100));}});}if(o.get){each(dom.select('IMG',o.node),function(n){var ci,cb,mt;if(ed.getParam('media_use_script')){if(isMediaElm(n))n.className=n.className.replace(/mceItem/g,'mceTemp');return;}switch(n.className){case'mceItemFlash':ci='d27cdb6e-ae6d-11cf-96b8-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='application/x-shockwave-flash';break;case'mceItemShockWave':ci='166b1bca-3f9c-11cf-8075-444553540000';cb='http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';mt='application/x-director';break;case'mceItemWindowsMedia':ci=ed.getParam('media_wmp6_compatible')?'05589fa1-c356-11ce-bf01-00aa0055595a':'6bf52a52-394a-11d3-b153-00c04f79faa6';cb='http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';mt='application/x-mplayer2';break;case'mceItemQuickTime':ci='02bf25d5-8c17-4b23-bc80-d3488abddc6b';cb='http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';mt='video/quicktime';break;case'mceItemRealMedia':ci='cfcdaa03-8be4-11cf-b84b-0020afbbccfa';cb='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';mt='audio/x-pn-realaudio-plugin';break;}if(ci){dom.replace(t._buildObj({classid:ci,codebase:cb,type:mt},n),n);}});}});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/_value=/g,'value=');});if(ed.getParam('media_use_script')){function getAttr(s,n){n=new RegExp(n+'=\"([^\"]+)\"','g').exec(s);return n?ed.dom.decode(n[1]):'';};ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<img[^>]+>/g,function(im){var cl=getAttr(im,'class');if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)){at=t._parse(getAttr(im,'title'));at.width=getAttr(im,'width');at.height=getAttr(im,'height');im='<script type="text/javascript">write'+cl.substring(7)+'({'+t._serialize(at)+'});</script>';}return im;});});}},getInfo:function(){return{longname:'Media',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_buildObj:function(o,n){var ob,ed=this.editor,dom=ed.dom,p=this._parse(n.title);p.width=o.width=dom.getAttrib(n,'width')||100;p.height=o.height=dom.getAttrib(n,'height')||100;ob=dom.create('span',{mce_name:'object',classid:"clsid:"+o.classid,codebase:o.codebase,width:o.width,height:o.height});if(p.src)p.src=ed.convertURL(p.src,'src',n);each(p,function(v,k){if(!/^(width|height|codebase|classid)$/.test(k)){if(o.type=='application/x-mplayer2'&&k=='src')k='url';dom.add(ob,'span',{mce_name:'param',name:k,'_value':v});}});dom.add(ob,'span',tinymce.extend({mce_name:'embed',type:o.type},p));return ob;},_spansToImgs:function(p){var t=this,dom=t.editor.dom,im,ci;each(dom.select('span',p),function(n){if(dom.getAttrib(n,'class')=='mceItemObject'){ci=dom.getAttrib(n,"classid").toLowerCase().replace(/\s+/g,'');switch(ci){case'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':dom.replace(t._createImg('mceItemFlash',n),n);break;case'clsid:166b1bca-3f9c-11cf-8075-444553540000':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':case'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':case'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}return;}if(dom.getAttrib(n,'class')=='mceItemEmbed'){switch(dom.getAttrib(n,'type')){case'application/x-shockwave-flash':dom.replace(t._createImg('mceItemFlash',n),n);break;case'application/x-director':dom.replace(t._createImg('mceItemShockWave',n),n);break;case'application/x-mplayer2':dom.replace(t._createImg('mceItemWindowsMedia',n),n);break;case'video/quicktime':dom.replace(t._createImg('mceItemQuickTime',n),n);break;case'audio/x-pn-realaudio-plugin':dom.replace(t._createImg('mceItemRealMedia',n),n);break;default:dom.replace(t._createImg('mceItemFlash',n),n);}}});},_createImg:function(cl,n){var im,dom=this.editor.dom,pa={},ti='';im=dom.create('img',{src:this.url+'/img/trans.gif',width:dom.getAttrib(n,'width')||100,height:dom.getAttrib(n,'height')||100,'class':cl});each(['id','name','width','height','bgcolor','align','flashvars','src','wmode'],function(na){var v=dom.getAttrib(n,na);if(v)pa[na]=v;});each(dom.select('span',n),function(n){if(dom.hasClass(n,'mceItemParam'))pa[dom.getAttrib(n,'name')]=dom.getAttrib(n,'_value');});if(pa.movie){pa.src=pa.movie;delete pa.movie;}delete pa.width;delete pa.height;im.title=this._serialize(pa);return im;},_parse:function(s){return tinymce.util.JSON.parse('{'+s+'}');},_serialize:function(o){return tinymce.util.JSON.serialize(o).replace(/[{}]/g,'');}});tinymce.PluginManager.add('media',tinymce.plugins.MediaPlugin);})();
program/js/tiny_mce/plugins/media/editor_plugin_src.js
@@ -1,174 +1,129 @@
/**
 * $Id: editor_plugin_src.js 296 2007-08-21 10:36:35Z spocke $
 * $Id: editor_plugin_src.js 763 2008-04-03 13:25:45Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('media');
(function() {
    var each = tinymce.each;
var TinyMCE_MediaPlugin = {
    getInfo : function() {
        return {
            longname : 'Media',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
    tinymce.create('tinymce.plugins.MediaPlugin', {
        init : function(ed, url) {
            var t = this;
            t.editor = ed;
            t.url = url;
            function isMediaElm(n) {
                return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);
        };
    },
    initInstance : function(inst) {
        // Warn if user has flash plugin and media plugin at the same time
        if (inst.hasPlugin('flash') && !tinyMCE.flashWarn) {
            alert('Flash plugin is deprecated and should not be used together with the media plugin.');
            tinyMCE.flashWarn = true;
        }
        if (!tinyMCE.settings['media_skip_plugin_css'])
            tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/media/css/content.css");
    },
    getControlHTML : function(cn) {
        switch (cn) {
            case "media":
                return tinyMCE.getButtonHTML(cn, 'lang_media_desc', '{$pluginurl}/images/media.gif', 'mceMedia');
        }
        return "";
    },
    execCommand : function(editor_id, element, command, user_interface, value) {
        // Handle commands
        switch (command) {
            case "mceMedia":
                tinyMCE.openWindow({
                        file : '../../plugins/media/media.htm',
                        width : 430 + tinyMCE.getLang('lang_media_delta_width', 0),
                        height : 470 + tinyMCE.getLang('lang_media_delta_height', 0)
            // Register commands
            ed.addCommand('mceMedia', function() {
                ed.windowManager.open({
                    file : url + '/media.htm',
                    width : 430 + parseInt(ed.getLang('media.delta_width', 0)),
                    height : 470 + parseInt(ed.getLang('media.delta_height', 0)),
                    inline : 1
                    }, {
                        editor_id : editor_id,
                        inline : "yes"
                    plugin_url : url
                });
                });
                return true;
       }
            // Register buttons
            ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});
       // Pass to next handler in chain
            ed.onNodeChange.add(function(ed, cm, n) {
                cm.setActive('media', n.nodeName == 'IMG' && isMediaElm(n));
            });
            ed.onInit.add(function() {
                var lo = {
                    mceItemFlash : 'flash',
                    mceItemShockWave : 'shockwave',
                    mceItemWindowsMedia : 'windowsmedia',
                    mceItemQuickTime : 'quicktime',
                    mceItemRealMedia : 'realmedia'
                };
                if (ed.settings.content_css !== false)
                    ed.dom.loadCSS(url + "/css/content.css");
                if (ed.theme.onResolveName) {
                    ed.theme.onResolveName.add(function(th, o) {
                        if (o.name == 'img') {
                            each(lo, function(v, k) {
                                if (ed.dom.hasClass(o.node, k)) {
                                    o.name = v;
                                    o.title = ed.dom.getAttrib(o.node, 'title');
       return false;
    },
    cleanup : function(type, content, inst) {
        var nl, img, i, ne, d, s, ci;
        switch (type) {
            case "insert_to_editor":
                img = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
                content = content.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, '<img class="mceItem$1" title="$2" src="' + img + '" />');
                content = content.replace(/<object([^>]*)>/gi, '<div class="mceItemObject" $1>');
                content = content.replace(/<embed([^>]*)>/gi, '<div class="mceItemObjectEmbed" $1>');
                content = content.replace(/<\/(object|embed)([^>]*)>/gi, '</div>');
                content = content.replace(/<param([^>]*)>/gi, '<div $1 class="mceItemParam"></div>');
                content = content.replace(new RegExp('\\/ class="mceItemParam"><\\/div>', 'gi'), 'class="mceItemParam"></div>');
                break;
            case "insert_to_editor_dom":
                d = inst.getDoc();
                nl = content.getElementsByTagName("img");
                for (i=0; i<nl.length; i++) {
                    if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(nl[i].className)) {
                        nl[i].width = nl[i].title.replace(/.*width:[^0-9]?([0-9]+)%?.*/g, '$1');
                        nl[i].height = nl[i].title.replace(/.*height:[^0-9]?([0-9]+)%?.*/g, '$1');
                        //nl[i].align = nl[i].title.replace(/.*align:([a-z]+).*/gi, '$1');
                    }
                            });
                        }
                    });
                }
                nl = tinyMCE.selectElements(content, 'DIV', function (n) {return tinyMCE.hasCSSClass(n, 'mceItemObject');});
                for (i=0; i<nl.length; i++) {
                    ci = tinyMCE.getAttrib(nl[i], "classid").toLowerCase().replace(/\s+/g, '');
                    switch (ci) {
                        case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':
                            nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemFlash', d, nl[i]), nl[i]);
                            break;
                        case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':
                            nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemShockWave', d, nl[i]), nl[i]);
                            break;
                        case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':
                        case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':
                        case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':
                            nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemWindowsMedia', d, nl[i]), nl[i]);
                            break;
                        case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':
                            nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemQuickTime', d, nl[i]), nl[i]);
                            break;
                        case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':
                            nl[i].parentNode.replaceChild(TinyMCE_MediaPlugin._createImg('mceItemRealMedia', d, nl[i]), nl[i]);
                            break;
                if (ed && ed.plugins.contextmenu) {
                    ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
                        if (e.nodeName == 'IMG' && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)) {
                            m.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});
                    }
                    });
                }
            });
            ed.onBeforeSetContent.add(function(ed, o) {
                var h = o.content;
                h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {
                    var o = t._parse(c);
                    return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'
                });
                h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');
                h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');
                h = h.replace(/<\/(object|embed)([^>]*)>/gi, '</span>');
                h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_value=') + ' class="mceItemParam"></span>'});
                h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');
                o.content = h;
            });
            ed.onSetContent.add(function() {
                t._spansToImgs(ed.getBody());
            });
            ed.onPreProcess.add(function(ed, o) {
                var dom = ed.dom;
                if (o.set) {
                    t._spansToImgs(o.node);
                    each(dom.select('IMG', o.node), function(n) {
                        var p;
                        if (isMediaElm(n)) {
                            p = t._parse(n.title);
                            dom.setAttrib(n, 'width', dom.getAttrib(n, 'width', p.width || 100));
                            dom.setAttrib(n, 'height', dom.getAttrib(n, 'height', p.height || 100));
                        }
                    });
                }
                // Handle embed (if any)
                nl = tinyMCE.selectNodes(content, function (n) {return n.className == 'mceItemObjectEmbed';});
                for (i=0; i<nl.length; i++) {
                    switch (tinyMCE.getAttrib(nl[i], 'type')) {
                        case 'application/x-shockwave-flash':
                            TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemFlash');
                            break;
                if (o.get) {
                    each(dom.select('IMG', o.node), function(n) {
                        var ci, cb, mt;
                        case 'application/x-director':
                            TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemShockWave');
                            break;
                        if (ed.getParam('media_use_script')) {
                            if (isMediaElm(n))
                                n.className = n.className.replace(/mceItem/g, 'mceTemp');
                        case 'application/x-mplayer2':
                            TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemWindowsMedia');
                            break;
                        case 'video/quicktime':
                            TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemQuickTime');
                            break;
                        case 'audio/x-pn-realaudio-plugin':
                            TinyMCE_MediaPlugin._createImgFromEmbed(nl[i], d, 'mceItemRealMedia');
                            break;
                    }
                }
                break;
            case "get_from_editor":
                var startPos = -1, endPos, attribs, chunkBefore, chunkAfter, embedHTML, at, pl, cb, mt, ex;
                while ((startPos = content.indexOf('<img', startPos+1)) != -1) {
                    endPos = content.indexOf('/>', startPos);
                    attribs = TinyMCE_MediaPlugin._parseAttributes(content.substring(startPos + 4, endPos));
                    // Is not flash, skip it
                    if (!/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(attribs['class']))
                        continue;
                    endPos += 2;
                    // Parse attributes
                    at = attribs['title'];
                    if (at) {
                        at = at.replace(/&(#39|apos);/g, "'");
                        at = at.replace(/&#quot;/g, '"');
                        try {
                            pl = eval('x={' + at + '};');
                        } catch (ex) {
                            pl = {};
                        }
                            return;
                    }
                    // Use object/embed
                    if (!tinyMCE.getParam('media_use_script', false)) {
                        switch (attribs['class']) {
                        switch (n.className) {
                            case 'mceItemFlash':
                                ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';
                                cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
@@ -176,257 +131,229 @@
                                break;
                            case 'mceItemShockWave':
                                ci = '166B1BCA-3F9C-11CF-8075-444553540000';
                                ci = '166b1bca-3f9c-11cf-8075-444553540000';
                                cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
                                mt = 'application/x-director';
                                break;
                            case 'mceItemWindowsMedia':
                                ci = tinyMCE.getParam('media_wmp6_compatible') ? '05589FA1-C356-11CE-BF01-00AA0055595A' : '6BF52A52-394A-11D3-B153-00C04F79FAA6';
                                ci = ed.getParam('media_wmp6_compatible') ? '05589fa1-c356-11ce-bf01-00aa0055595a' : '6bf52a52-394a-11d3-b153-00c04f79faa6';
                                cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
                                mt = 'application/x-mplayer2';
                                break;
                            case 'mceItemQuickTime':
                                ci = '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
                                ci = '02bf25d5-8c17-4b23-bc80-d3488abddc6b';
                                cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
                                mt = 'video/quicktime';
                                break;
                            case 'mceItemRealMedia':
                                ci = 'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
                                ci = 'cfcdaa03-8be4-11cf-b84b-0020afbbccfa';
                                cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
                                mt = 'audio/x-pn-realaudio-plugin';
                                break;
                        }
                        // Convert the URL
                        pl.src = tinyMCE.convertURL(pl.src, null, true);
                        embedHTML = TinyMCE_MediaPlugin._getEmbed(ci, cb, mt, pl, attribs);
                    } else {
                        // Use script version
                        switch (attribs['class']) {
                            case 'mceItemFlash':
                                s = 'writeFlash';
                                break;
                            case 'mceItemShockWave':
                                s = 'writeShockWave';
                                break;
                            case 'mceItemWindowsMedia':
                                s = 'writeWindowsMedia';
                                break;
                            case 'mceItemQuickTime':
                                s = 'writeQuickTime';
                                break;
                            case 'mceItemRealMedia':
                                s = 'writeRealMedia';
                                break;
                        if (ci) {
                            dom.replace(t._buildObj({
                                classid : ci,
                                codebase : cb,
                                type : mt
                            }, n), n);
                        }
                        if (attribs.width)
                            at = at.replace(/width:[^0-9]?[0-9]+%?[^0-9]?/g, "width:'" + attribs.width + "'");
                        if (attribs.height)
                            at = at.replace(/height:[^0-9]?[0-9]+%?[^0-9]?/g, "height:'" + attribs.height + "'");
                        // Force absolute URL
                        pl.src = tinyMCE.convertURL(pl.src, null, true);
                        at = at.replace(new RegExp("src:'[^']*'", "g"), "src:'" + pl.src + "'");
                        embedHTML = '<script type="text/javascript">' + s + '({' + at + '});</script>';
                    });
                    }
            });
                    // Insert embed/object chunk
                    chunkBefore = content.substring(0, startPos);
                    chunkAfter = content.substring(endPos);
                    content = chunkBefore + embedHTML + chunkAfter;
                }
                break;
        }
            ed.onPostProcess.add(function(ed, o) {
                o.content = o.content.replace(/_value=/g, 'value=');
            });
        return content;
    },
            if (ed.getParam('media_use_script')) {
                function getAttr(s, n) {
                    n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
    handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
        if (node == null)
            return;
        do {
            if (node.nodeName == "IMG" && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(node, 'class'))) {
                tinyMCE.switchClass(editor_id + '_media', 'mceButtonSelected');
                return true;
            }
        } while ((node = node.parentNode));
        tinyMCE.switchClass(editor_id + '_media', 'mceButtonNormal');
        return true;
    },
    _createImgFromEmbed : function(n, d, cl) {
        var ne, at, i, ti = '', an;
        ne = d.createElement('img');
        ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
        ne.width = tinyMCE.getAttrib(n, 'width');
        ne.height = tinyMCE.getAttrib(n, 'height');
        ne.className = cl;
        at = n.attributes;
        for (i=0; i<at.length; i++) {
            if (at[i].specified && at[i].nodeValue) {
                an = at[i].nodeName.toLowerCase();
                if (an == 'src')
                    continue;
                if (an == 'mce_src')
                    an = 'src';
                if (an.indexOf('mce_') == -1 && !new RegExp('^(class|type)$').test(an))
                    ti += an.toLowerCase() + ':\'' + at[i].nodeValue + "',";
            }
        }
        ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;
        ne.title = ti;
        n.parentNode.replaceChild(ne, n);
    },
    _createImg : function(cl, d, n) {
        var i, nl, ti = "", an, av, al = new Array();
        ne = d.createElement('img');
        ne.src = tinyMCE.getParam("theme_href") + '/images/spacer.gif';
        ne.width = tinyMCE.getAttrib(n, 'width');
        ne.height = tinyMCE.getAttrib(n, 'height');
        ne.className = cl;
        al.id = tinyMCE.getAttrib(n, 'id');
        al.name = tinyMCE.getAttrib(n, 'name');
        al.width = tinyMCE.getAttrib(n, 'width');
        al.height = tinyMCE.getAttrib(n, 'height');
        al.bgcolor = tinyMCE.getAttrib(n, 'bgcolor');
        al.align = tinyMCE.getAttrib(n, 'align');
        al.class_name = tinyMCE.getAttrib(n, 'mce_class');
        nl = n.getElementsByTagName('div');
        for (i=0; i<nl.length; i++) {
            av = tinyMCE.getAttrib(nl[i], 'value');
            av = av.replace(new RegExp('\\\\', 'g'), '\\\\');
            av = av.replace(new RegExp('"', 'g'), '\\"');
            av = av.replace(new RegExp("'", 'g'), "\\'");
            an = tinyMCE.getAttrib(nl[i], 'name');
            al[an] = av;
        }
        if (al.movie) {
            al.src = al.movie;
            al.movie = null;
        }
        for (an in al) {
            if (al[an] != null && typeof(al[an]) != "function" && al[an] != '')
                ti += an.toLowerCase() + ':\'' + al[an] + "',";
        }
        ti = ti.length > 0 ? ti.substring(0, ti.length - 1) : ti;
        ne.title = ti;
        return ne;
    },
    _getEmbed : function(cls, cb, mt, p, at) {
        var h = '', n;
        p.width = at.width ? at.width : p.width;
        p.height = at.height ? at.height : p.height;
        h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';
        h += typeof(p.id) != "undefined" ? ' id="' + p.id + '"' : '';
        h += typeof(p.name) != "undefined" ? ' name="' + p.name + '"' : '';
        h += typeof(p.width) != "undefined" ? ' width="' + p.width + '"' : '';
        h += typeof(p.height) != "undefined" ? ' height="' + p.height + '"' : '';
        h += typeof(p.align) != "undefined" ? ' align="' + p.align + '"' : '';
        h += '>';
        for (n in p) {
            if (typeof(p[n]) != "undefined" && typeof(p[n]) != "function") {
                h += '<param name="' + n + '" value="' + p[n] + '" />';
                // Add extra url parameter if it's an absolute URL on WMP
                if (n == 'src' && p[n].indexOf('://') != -1 && mt == 'application/x-mplayer2')
                    h += '<param name="url" value="' + p[n] + '" />';
            }
        }
        h += '<embed type="' + mt + '"';
        for (n in p) {
            if (typeof(p[n]) == "function")
                continue;
            // Skip url parameter for embed tag on WMP
            if (!(n == 'url' && mt == 'application/x-mplayer2'))
                h += ' ' + n + '="' + p[n] + '"';
        }
        h += '></embed></object>';
        return h;
    },
    _parseAttributes : function(attribute_string) {
        var attributeName = "", endChr = '"';
        var attributeValue = "";
        var withInName;
        var withInValue;
        var attributes = new Array();
        var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g');
        if (attribute_string == null || attribute_string.length < 2)
            return null;
        withInName = withInValue = false;
        for (var i=0; i<attribute_string.length; i++) {
            var chr = attribute_string.charAt(i);
            if ((chr == '"' || chr == "'") && !withInValue) {
                withInValue = true;
                endChr = chr;
            } else if (chr == endChr && withInValue) {
                withInValue = false;
                var pos = attributeName.lastIndexOf(' ');
                if (pos != -1)
                    attributeName = attributeName.substring(pos+1);
                attributes[attributeName.toLowerCase()] = attributeValue.substring(1);
                attributeName = "";
                attributeValue = "";
            } else if (!whiteSpaceRegExp.test(chr) && !withInName && !withInValue)
                withInName = true;
            if (chr == '=' && withInName)
                withInName = false;
            if (withInName)
                attributeName += chr;
            if (withInValue)
                attributeValue += chr;
        }
        return attributes;
    }
                    return n ? ed.dom.decode(n[1]) : '';
};
tinyMCE.addPlugin("media", TinyMCE_MediaPlugin);
                ed.onPostProcess.add(function(ed, o) {
                    o.content = o.content.replace(/<img[^>]+>/g, function(im) {
                        var cl = getAttr(im, 'class');
                        if (/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)) {
                            at = t._parse(getAttr(im, 'title'));
                            at.width = getAttr(im, 'width');
                            at.height = getAttr(im, 'height');
                            im = '<script type="text/javascript">write' + cl.substring(7) + '({' + t._serialize(at) + '});</script>';
                        }
                        return im;
                    });
                });
            }
        },
        getInfo : function() {
            return {
                longname : 'Media',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
        },
        // Private methods
        _buildObj : function(o, n) {
            var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title);
            p.width = o.width = dom.getAttrib(n, 'width') || 100;
            p.height = o.height = dom.getAttrib(n, 'height') || 100;
            ob = dom.create('span', {
                mce_name : 'object',
                classid : "clsid:" + o.classid,
                codebase : o.codebase,
                width : o.width,
                height : o.height
            });
            if (p.src)
                p.src = ed.convertURL(p.src, 'src', n);
            each (p, function(v, k) {
                if (!/^(width|height|codebase|classid)$/.test(k)) {
                    // Use url instead of src in IE for Windows media
                    if (o.type == 'application/x-mplayer2' && k == 'src')
                        k = 'url';
                    dom.add(ob, 'span', {mce_name : 'param', name : k, '_value' : v});
                }
            });
            dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p));
            return ob;
        },
        _spansToImgs : function(p) {
            var t = this, dom = t.editor.dom, im, ci;
            each(dom.select('span', p), function(n) {
                // Convert object into image
                if (dom.getAttrib(n, 'class') == 'mceItemObject') {
                    ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, '');
                    switch (ci) {
                        case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':
                            dom.replace(t._createImg('mceItemFlash', n), n);
                            break;
                        case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':
                            dom.replace(t._createImg('mceItemShockWave', n), n);
                            break;
                        case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':
                        case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':
                        case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':
                            dom.replace(t._createImg('mceItemWindowsMedia', n), n);
                            break;
                        case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':
                            dom.replace(t._createImg('mceItemQuickTime', n), n);
                            break;
                        case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':
                            dom.replace(t._createImg('mceItemRealMedia', n), n);
                            break;
                        default:
                            dom.replace(t._createImg('mceItemFlash', n), n);
                    }
                    return;
                }
                // Convert embed into image
                if (dom.getAttrib(n, 'class') == 'mceItemEmbed') {
                    switch (dom.getAttrib(n, 'type')) {
                        case 'application/x-shockwave-flash':
                            dom.replace(t._createImg('mceItemFlash', n), n);
                            break;
                        case 'application/x-director':
                            dom.replace(t._createImg('mceItemShockWave', n), n);
                            break;
                        case 'application/x-mplayer2':
                            dom.replace(t._createImg('mceItemWindowsMedia', n), n);
                            break;
                        case 'video/quicktime':
                            dom.replace(t._createImg('mceItemQuickTime', n), n);
                            break;
                        case 'audio/x-pn-realaudio-plugin':
                            dom.replace(t._createImg('mceItemRealMedia', n), n);
                            break;
                        default:
                            dom.replace(t._createImg('mceItemFlash', n), n);
                    }
                }
            });
        },
        _createImg : function(cl, n) {
            var im, dom = this.editor.dom, pa = {}, ti = '';
            // Create image
            im = dom.create('img', {
                src : this.url + '/img/trans.gif',
                width : dom.getAttrib(n, 'width') || 100,
                height : dom.getAttrib(n, 'height') || 100,
                'class' : cl
            });
            // Setup base parameters
            each(['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode'], function(na) {
                var v = dom.getAttrib(n, na);
                if (v)
                    pa[na] = v;
            });
            // Add optional parameters
            each(dom.select('span', n), function(n) {
                if (dom.hasClass(n, 'mceItemParam'))
                    pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_value');
            });
            // Use src not movie
            if (pa.movie) {
                pa.src = pa.movie;
                delete pa.movie;
            }
            delete pa.width;
            delete pa.height;
            im.title = this._serialize(pa);
            return im;
        },
        _parse : function(s) {
            return tinymce.util.JSON.parse('{' + s + '}');
        },
        _serialize : function(o) {
            return tinymce.util.JSON.serialize(o).replace(/[{}]/g, '');
        }
    });
    // Register plugin
    tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);
})();
program/js/tiny_mce/plugins/media/images/media.gif
Binary files differ
program/js/tiny_mce/plugins/media/img/flash.gif

program/js/tiny_mce/plugins/media/img/flv_player.swf
Binary files differ
program/js/tiny_mce/plugins/media/img/quicktime.gif

program/js/tiny_mce/plugins/media/img/realmedia.gif

program/js/tiny_mce/plugins/media/img/shockwave.gif

program/js/tiny_mce/plugins/media/img/trans.gif

program/js/tiny_mce/plugins/media/img/windowsmedia.gif

program/js/tiny_mce/plugins/media/js/embed.js
program/js/tiny_mce/plugins/media/js/media.js
File was renamed from program/js/tiny_mce/plugins/media/jscripts/media.js
@@ -1,27 +1,30 @@
var oldWidth, oldHeight;
var url = tinyMCE.getParam("media_external_list_url");
if (url != null) {
    // Fix relative
    if (url.charAt(0) != '/' && url.indexOf('://') == -1)
        url = tinyMCE.documentBasePath + "/" + url;
tinyMCEPopup.requireLangPack();
    document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
}
var oldWidth, oldHeight, ed, url;
if (url = tinyMCEPopup.getParam("media_external_list_url"))
    document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
function init() {
    var pl = "", f, val;
    var type = "flash", fe, i;
    ed = tinyMCEPopup.editor;
    tinyMCEPopup.resizeToInnerSize();
    f = document.forms[0]
    fe = tinyMCE.selectedInstance.getFocusElement();
    if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {
        pl = "x={" + fe.title + "};";
    fe = ed.selection.getNode();
    if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
        pl = fe.title;
        switch (tinyMCE.getAttrib(fe, 'class')) {
        switch (ed.dom.getAttrib(fe, 'class')) {
            case 'mceItemFlash':
                type = 'flash';
                break;
            case 'mceItemFlashVideo':
                type = 'flv';
                break;
            case 'mceItemShockWave':
@@ -41,26 +44,26 @@
                break;
        }
        document.forms[0].insert.value = tinyMCE.getLang('lang_update', 'Insert', true);
        document.forms[0].insert.value = ed.getLang('update', 'Insert', true);
    }
    document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');
    document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');
    document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
    var html = getMediaListHTML('filebrowser','src','media','media');
    var html = getMediaListHTML('medialist','src','media','media');
    if (html == "")
        document.getElementById("linklistrow").style.display = 'none';
    else
        document.getElementById("linklistcontainer").innerHTML = html;
    // Resize some elements
    if (isVisible('filebrowsercontainer'))
    if (isVisible('filebrowser'))
        document.getElementById('src').style.width = '230px';
    // Setup form
    if (pl != "") {
        pl = eval(pl);
        pl = tinyMCEPopup.editor.plugins.media._parse(pl);
        switch (type) {
            case "flash":
@@ -155,10 +158,10 @@
        setStr(pl, null, 'width');
        setStr(pl, null, 'height');
        if ((val = tinyMCE.getAttrib(fe, "width")) != "")
        if ((val = ed.dom.getAttrib(fe, "width")) != "")
            pl.width = f.width.value = val;
        if ((val = tinyMCE.getAttrib(fe, "height")) != "")
        if ((val = ed.dom.getAttrib(fe, "height")) != "")
            pl.height = f.height.value = val;
        oldWidth = pl.width ? parseInt(pl.width) : 0;
@@ -177,19 +180,25 @@
function insertMedia() {
    var fe, f = document.forms[0], h;
    tinyMCEPopup.restoreSelection();
    if (!AutoValidator.validate(f)) {
        alert(tinyMCE.getLang('lang_invalid_data'));
        alert(ed.getLang('invalid_data'));
        return false;
    }
    f.width.value = f.width.value == "" ? 100 : f.width.value;
    f.height.value = f.height.value == "" ? 100 : f.height.value;
    fe = tinyMCE.selectedInstance.getFocusElement();
    if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(tinyMCE.getAttrib(fe, 'class'))) {
    fe = ed.selection.getNode();
    if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
        switch (f.media_type.options[f.media_type.selectedIndex].value) {
            case "flash":
                fe.className = "mceItemFlash";
                break;
            case "flv":
                fe.className = "mceItemFlashVideo";
                break;
            case "shockwave":
@@ -210,7 +219,7 @@
        }
        if (fe.width != f.width.value || fe.height != f.height.height)
            tinyMCE.selectedInstance.repaint();
            ed.execCommand('mceRepaint');
        fe.title = serializeParameters();
        fe.width = f.width.value;
@@ -219,11 +228,15 @@
        fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');
        fe.align = f.align.options[f.align.selectedIndex].value;
    } else {
        h = '<img src="' + tinyMCE.getParam("theme_href") + '/images/spacer.gif"' ;
        h = '<img src="' + tinyMCEPopup.getWindowArg("plugin_url") + '/img/trans.gif"' ;
        switch (f.media_type.options[f.media_type.selectedIndex].value) {
            case "flash":
                h += ' class="mceItemFlash"';
                break;
            case "flv":
                h += ' class="mceItemFlashVideo"';
                break;
            case "shockwave":
@@ -250,17 +263,29 @@
        h += ' />';
        tinyMCE.selectedInstance.execCommand('mceInsertContent', false, h);
        ed.execCommand('mceInsertContent', false, h);
    }
    tinyMCEPopup.close();
}
function updatePreview() {
    var f = document.forms[0], type;
    f.width.value = f.width.value || '320';
    f.height.value = f.height.value || '240';
    type = getType(f.src.value);
    selectByValue(f, 'media_type', type);
    changedType(type);
    generatePreview();
}
function getMediaListHTML() {
    if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {
        var html = "";
        html += '<select id="linklist" name="linklist" style="width: 250px" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.src.value=this.options[this.selectedIndex].value;">';
        html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;updatePreview();">';
        html += '<option value="">---</option>';
        for (var i=0; i<tinyMCEMediaList.length; i++)
@@ -277,17 +302,13 @@
function getType(v) {
    var fo, i, c, el, x, f = document.forms[0];
    fo = tinyMCE.getParam("media_types", "flash=swf;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');
    fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');
    // YouTube
    if (v.indexOf('http://www.youtube.com/watch?v=') == 0 || v.indexOf('http://youtube.com/watch?v=') == 0) {
    if (v.match(/watch\?v=(.+)(.*)/)) {
        f.width.value = '425';
        f.height.value = '350';
        v = v.replace('http://youtube.com/watch?v=', '');
        v = v.replace('http://www.youtube.com/watch?v=', '');
        f.src.value = 'http://www.youtube.com/v/' + v;
        f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1];
        return 'flash';
    }
@@ -322,7 +343,7 @@
    // Update qtsrc also
    if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
        alert(tinyMCE.getLang("lang_media_qt_stream_warn"));
        alert(ed.getLang("media_qt_stream_warn"));
        if (f.qt_qtsrc.value == '')
            f.qt_qtsrc.value = f.src.value;
@@ -333,6 +354,7 @@
    var d = document;
    d.getElementById('flash_options').style.display = 'none';
    d.getElementById('flv_options').style.display = 'none';
    d.getElementById('qt_options').style.display = 'none';
    d.getElementById('shockwave_options').style.display = 'none';
    d.getElementById('wmp_options').style.display = 'none';
@@ -473,6 +495,9 @@
    var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
    var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
    if (n == 'src')
        v = tinyMCEPopup.editor.convertURL(v, 'src', null);
    return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");
}
@@ -542,7 +567,7 @@
            break;
        case "wmp":
            cls = tinyMCE.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
            cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';
            codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
            type = 'application/x-mplayer2';
            break;
@@ -559,14 +584,14 @@
        return;
    }
    pl = eval('x={' + pl + '};');
    pl = tinyMCEPopup.editor.plugins.media._parse(pl);
    if (!pl.src) {
        p.innerHTML = '';
        return;
    }
    pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);
    pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src);
    pl.width = !pl.width ? 100 : pl.width;
    pl.height = !pl.height ? 100 : pl.height;
    pl.id = !pl.id ? 'obj' : pl.id;
@@ -592,3 +617,5 @@
    p.innerHTML = "<!-- x --->" + h;
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/media/langs/en.js
File was deleted
program/js/tiny_mce/plugins/media/langs/en_dlg.js
New file
@@ -0,0 +1,103 @@
tinyMCE.addI18n('en.media_dlg',{
title:"Insert / edit embedded media",
general:"General",
advanced:"Advanced",
file:"File/URL",
list:"List",
size:"Dimensions",
preview:"Preview",
constrain_proportions:"Constrain proportions",
type:"Type",
id:"Id",
name:"Name",
class_name:"Class",
vspace:"V-Space",
hspace:"H-Space",
play:"Auto play",
loop:"Loop",
menu:"Show menu",
quality:"Quality",
scale:"Scale",
align:"Align",
salign:"SAlign",
wmode:"WMode",
bgcolor:"Background",
base:"Base",
flashvars:"Flashvars",
liveconnect:"SWLiveConnect",
autohref:"AutoHREF",
cache:"Cache",
hidden:"Hidden",
controller:"Controller",
kioskmode:"Kiosk mode",
playeveryframe:"Play every frame",
targetcache:"Target cache",
correction:"No correction",
enablejavascript:"Enable JavaScript",
starttime:"Start time",
endtime:"End time",
href:"Href",
qtsrcchokespeed:"Choke speed",
target:"Target",
volume:"Volume",
autostart:"Auto start",
enabled:"Enabled",
fullscreen:"Fullscreen",
invokeurls:"Invoke URLs",
mute:"Mute",
stretchtofit:"Stretch to fit",
windowlessvideo:"Windowless video",
balance:"Balance",
baseurl:"Base URL",
captioningid:"Captioning id",
currentmarker:"Current marker",
currentposition:"Current position",
defaultframe:"Default frame",
playcount:"Play count",
rate:"Rate",
uimode:"UI Mode",
flash_options:"Flash options",
qt_options:"Quicktime options",
wmp_options:"Windows media player options",
rmp_options:"Real media player options",
shockwave_options:"Shockwave options",
autogotourl:"Auto goto URL",
center:"Center",
imagestatus:"Image status",
maintainaspect:"Maintain aspect",
nojava:"No java",
prefetch:"Prefetch",
shuffle:"Shuffle",
console:"Console",
numloop:"Num loops",
controls:"Controls",
scriptcallbacks:"Script callbacks",
swstretchstyle:"Stretch style",
swstretchhalign:"Stretch H-Align",
swstretchvalign:"Stretch V-Align",
sound:"Sound",
progress:"Progress",
qtsrc:"QT Src",
qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",
align_top:"Top",
align_right:"Right",
align_bottom:"Bottom",
align_left:"Left",
align_center:"Center",
align_top_left:"Top left",
align_top_right:"Top right",
align_bottom_left:"Bottom left",
align_bottom_right:"Bottom right",
flv_options:"Flash video options",
flv_scalemode:"Scale mode",
flv_buffer:"Buffer",
flv_startimage:"Start image",
flv_starttime:"Start time",
flv_defaultvolume:"Default volumne",
flv_hiddengui:"Hidden GUI",
flv_autostart:"Auto start",
flv_loop:"Loop",
flv_showscalemodes:"Show scale modes",
flv_smoothvideo:"Smooth video",
flv_jscallback:"JS Callback"
});
program/js/tiny_mce/plugins/media/media.htm
@@ -1,35 +1,37 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_media_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/media.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/editable_selects.js"></script>
    <title>{#media_dlg.title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/media.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/validate.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <link href="css/media.css" rel="stylesheet" type="text/css" />
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body style="display: none">
    <form onsubmit="insertMedia();return false;" action="#">
        <div class="tabs">
            <ul>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{$lang_media_general}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_media_advanced}</a></span></li>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{#media_dlg.general}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>
            </ul>
        </div>
        <div class="panel_wrapper">
            <div id="general_panel" class="panel current">
                <fieldset>
                    <legend>{$lang_media_general}</legend>
                    <legend>{#media_dlg.general}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                            <tr>
                                <td><label for="media_type">{$lang_media_type}</label></td>
                                <td><label for="media_type">{#media_dlg.type}</label></td>
                                <td>
                                    <select id="media_type" name="media_type" onchange="changedType(this.value);generatePreview();">
                                        <option value="flash">Flash</option>
                                        <!-- <option value="flv">Flash video (FLV)</option> -->
                                        <option value="qt">Quicktime</option>
                                        <option value="shockwave">Shockwave</option>
                                        <option value="wmp">Windows Media</option>
@@ -38,65 +40,66 @@
                                </td>
                            </tr>
                            <tr>
                            <td><label for="src">{$lang_media_file}</label></td>
                            <td><label for="src">{#media_dlg.file}</label></td>
                              <td>
                                    <table border="0" cellspacing="0" cellpadding="0">
                                      <tr>
                                        <td><input id="src" name="src" type="text" value="" onchange="switchType(this.value);generatePreview();" /></td>
                                        <td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="switchType(this.value);generatePreview();" /></td>
                                        <td id="filebrowsercontainer">&nbsp;</td>
                                      </tr>
                                    </table>
                                </td>
                            </tr>
                            <tr id="linklistrow">
                                <td><label for="linklist">{$lang_media_list}</label></td>
                                <td><label for="linklist">{#media_dlg.list}</label></td>
                                <td id="linklistcontainer">&nbsp;</td>
                            </tr>
                            <tr>
                                <td><label for="width">{$lang_media_size}</label></td>
                                <td><label for="width">{#media_dlg.size}</label></td>
                                <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size"  onchange="generatePreview('height');" /></td>
                                        <td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>
                                        <td><label id="constrainlabel" for="constrain">{$lang_media_constrain_proportions}</label></td>
                                            <td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>
                                    </tr>
                                </table>
                                </td>
                            </tr>
                    </table>
                </fieldset>
                <fieldset>
                    <legend>{$lang_media_preview}</legend>
                    <legend>{#media_dlg.preview}</legend>
                    <div id="prev"></div>
                </fieldset>
            </div>
            <div id="advanced_panel" class="panel">
                <fieldset>
                    <legend>{$lang_media_advanced}</legend>
                    <legend>{#media_dlg.advanced}</legend>
                    <table border="0" cellpadding="4" cellspacing="0" width="100%">
                        <tr>
                            <td><label for="id">{$lang_media_id}</label></td>
                            <td><label for="id">{#media_dlg.id}</label></td>
                            <td><input type="text" id="id" name="id" onchange="generatePreview();" /></td>
                            <td><label for="name">{$lang_media_name}</label></td>
                            <td><label for="name">{#media_dlg.name}</label></td>
                            <td><input type="text" id="name" name="name" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="align">{$lang_media_align}</label></td>
                            <td><label for="align">{#media_dlg.align}</label></td>
                            <td>
                                <select id="align" name="align" onchange="generatePreview();">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="top">{$lang_media_align_top}</option>
                                    <option value="right">{$lang_media_align_right}</option>
                                    <option value="bottom">{$lang_media_align_bottom}</option>
                                    <option value="left">{$lang_media_align_left}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="top">{#media_dlg.align_top}</option>
                                    <option value="right">{#media_dlg.align_right}</option>
                                    <option value="bottom">{#media_dlg.align_bottom}</option>
                                    <option value="left">{#media_dlg.align_left}</option>
                                </select>
                            </td>
                            <td><label for="bgcolor">{$lang_media_bgcolor}</label></td>
                            <td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -108,23 +111,23 @@
                        </tr>
                        <tr>
                            <td><label for="vspace">{$lang_media_vspace}</label></td>
                            <td><label for="vspace">{#media_dlg.vspace}</label></td>
                            <td><input type="text" id="vspace" name="vspace" class="number" onchange="generatePreview();" /></td>
                            <td><label for="hspace">{$lang_media_hspace}</label></td>
                            <td><label for="hspace">{#media_dlg.hspace}</label></td>
                            <td><input type="text" id="hspace" name="hspace" class="number" onchange="generatePreview();" /></td>
                        </tr>
                    </table>
                </fieldset>
                <fieldset id="flash_options">
                    <legend>{$lang_media_flash_options}</legend>
                    <legend>{#media_dlg.flash_options}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
                            <td><label for="flash_quality">{$lang_media_quality}</label></td>
                            <td><label for="flash_quality">{#media_dlg.quality}</label></td>
                            <td>
                                <select id="flash_quality" name="flash_quality" onchange="generatePreview();">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="high">high</option>
                                    <option value="low">low</option>
                                    <option value="autolow">autolow</option>
@@ -133,40 +136,41 @@
                                </select>
                            </td>
                            <td><label for="flash_scale">{$lang_media_scale}</label></td>
                            <td><label for="flash_scale">{#media_dlg.scale}</label></td>
                            <td>
                                <select id="flash_scale" name="flash_scale" onchange="generatePreview();">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="showall">showall</option>
                                    <option value="noborder">noborder</option>
                                    <option value="exactfit">exactfit</option>
                                    <option value="noscale">noscale</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="flash_wmode">{$lang_media_wmode}</label></td>
                            <td><label for="flash_wmode">{#media_dlg.wmode}</label></td>
                            <td>
                                <select id="flash_wmode" name="flash_wmode" onchange="generatePreview();">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="window">window</option>
                                    <option value="opaque">opaque</option>
                                    <option value="transparent">transparent</option>
                                </select>
                            </td>
                            <td><label for="flash_salign">{$lang_media_salign}</label></td>
                            <td><label for="flash_salign">{#media_dlg.salign}</label></td>
                            <td>
                                <select id="flash_salign" name="flash_salign" onchange="generatePreview();">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="l">{$lang_media_align_left}</option>
                                    <option value="t">{$lang_media_align_top}</option>
                                    <option value="r">{$lang_media_align_right}</option>
                                    <option value="b">{$lang_media_align_bottom}</option>
                                    <option value="tl">{$lang_media_align_top_left}</option>
                                    <option value="tr">{$lang_media_align_top_right}</option>
                                    <option value="bl">{$lang_media_align_bottom_left}</option>
                                    <option value="br">{$lang_media_align_bottom_right}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="l">{#media_dlg.align_left}</option>
                                    <option value="t">{#media_dlg.align_top}</option>
                                    <option value="r">{#media_dlg.align_right}</option>
                                    <option value="b">{#media_dlg.align_bottom}</option>
                                    <option value="tl">{#media_dlg.align_top_left}</option>
                                    <option value="tr">{#media_dlg.align_top_right}</option>
                                    <option value="bl">{#media_dlg.align_bottom_left}</option>
                                    <option value="br">{#media_dlg.align_bottom_right}</option>
                                </select>
                            </td>
                        </tr>
@@ -176,7 +180,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flash_play">{$lang_media_play}</label></td>
                                        <td><label for="flash_play">{#media_dlg.play}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -185,7 +189,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flash_loop">{$lang_media_loop}</label></td>
                                        <td><label for="flash_loop">{#media_dlg.loop}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -196,7 +200,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flash_menu">{$lang_media_menu}</label></td>
                                        <td><label for="flash_menu">{#media_dlg.menu}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -205,7 +209,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="generatePreview();" /></td>
                                        <td><label for="flash_swliveconnect">{$lang_media_liveconnect}</label></td>
                                        <td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -214,19 +218,116 @@
                    <table>
                        <tr>
                            <td><label for="flash_base">{$lang_media_base}</label></td>
                            <td><label for="flash_base">{#media_dlg.base}</label></td>
                            <td><input type="text" id="flash_base" name="flash_base" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="flash_flashvars">{$lang_media_flashvars}</label></td>
                            <td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>
                            <td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="generatePreview();" /></td>
                        </tr>
                    </table>
                </fieldset>
                <fieldset id="flv_options">
                    <legend>{#media_dlg.flv_options}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
                            <td><label for="flv_scalemode">{#media_dlg.flv_scalemode}</label></td>
                            <td>
                                <select id="flv_scalemode" name="flv_scalemode" onchange="generatePreview();">
                                    <option value="">{#not_set}</option>
                                    <option value="none">none</option>
                                    <option value="double">double</option>
                                    <option value="full">full</option>
                                </select>
                            </td>
                            <td><label for="flv_buffer">{#media_dlg.flv_buffer}</label></td>
                            <td><input type="text" id="flv_buffer" name="flv_buffer" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="flv_startimage">{#media_dlg.flv_startimage}</label></td>
                            <td><input type="text" id="flv_startimage" name="flv_startimage" onchange="generatePreview();" /></td>
                            <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>
                            <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>
                            <td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>
                            <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>
                            <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flv_hiddengui" name="flv_hiddengui" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flv_hiddengui">{#media_dlg.flv_hiddengui}</label></td>
                                    </tr>
                                </table>
                            </td>
                            <td colspan="2">
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flv_autostart" name="flv_autostart" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flv_autostart">{#media_dlg.flv_autostart}</label></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flv_loop" name="flv_loop" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flv_loop">{#media_dlg.flv_loop}</label></td>
                                    </tr>
                                </table>
                            </td>
                            <td colspan="2">
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flv_showscalemodes" name="flv_showscalemodes" onchange="generatePreview();" /></td>
                                        <td><label for="flv_showscalemodes">{#media_dlg.flv_showscalemodes}</label></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flv_smoothvideo" name="flash_flv_flv_smoothvideosmoothvideo" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="flv_smoothvideo">{#media_dlg.flv_smoothvideo}</label></td>
                                    </tr>
                                </table>
                            </td>
                            <td colspan="2">
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="flv_jscallback" name="flv_jscallback" onchange="generatePreview();" /></td>
                                        <td><label for="flv_jscallback">{#media_dlg.flv_jscallback}</label></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                    </table>
                </fieldset>
                <fieldset id="qt_options">
                    <legend>{$lang_media_qt_options}</legend>
                    <legend>{#media_dlg.qt_options}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
@@ -234,7 +335,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_loop" name="qt_loop" onchange="generatePreview();" /></td>
                                        <td><label for="qt_loop">{$lang_media_loop}</label></td>
                                        <td><label for="qt_loop">{#media_dlg.loop}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -243,7 +344,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_autoplay" name="qt_autoplay" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="qt_autoplay">{$lang_media_play}</label></td>
                                        <td><label for="qt_autoplay">{#media_dlg.play}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -254,7 +355,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_cache" name="qt_cache" onchange="generatePreview();" /></td>
                                        <td><label for="qt_cache">{$lang_media_cache}</label></td>
                                        <td><label for="qt_cache">{#media_dlg.cache}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -263,7 +364,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_controller" name="qt_controller" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="qt_controller">{$lang_media_controller}</label></td>
                                        <td><label for="qt_controller">{#media_dlg.controller}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -274,7 +375,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_correction" name="qt_correction" onchange="generatePreview();" /></td>
                                        <td><label for="qt_correction">{$lang_media_correction}</label></td>
                                        <td><label for="qt_correction">{#media_dlg.correction}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -283,7 +384,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_enablejavascript" name="qt_enablejavascript" onchange="generatePreview();" /></td>
                                        <td><label for="qt_enablejavascript">{$lang_media_enablejavascript}</label></td>
                                        <td><label for="qt_enablejavascript">{#media_dlg.enablejavascript}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -294,7 +395,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_kioskmode" name="qt_kioskmode" onchange="generatePreview();" /></td>
                                        <td><label for="qt_kioskmode">{$lang_media_kioskmode}</label></td>
                                        <td><label for="qt_kioskmode">{#media_dlg.kioskmode}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -303,7 +404,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_autohref" name="qt_autohref" onchange="generatePreview();" /></td>
                                        <td><label for="qt_autohref">{$lang_media_autohref}</label></td>
                                        <td><label for="qt_autohref">{#media_dlg.autohref}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -314,7 +415,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_playeveryframe" name="qt_playeveryframe" onchange="generatePreview();" /></td>
                                        <td><label for="qt_playeveryframe">{$lang_media_playeveryframe}</label></td>
                                        <td><label for="qt_playeveryframe">{#media_dlg.playeveryframe}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -323,16 +424,16 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="qt_targetcache" name="qt_targetcache" onchange="generatePreview();" /></td>
                                        <td><label for="qt_targetcache">{$lang_media_targetcache}</label></td>
                                        <td><label for="qt_targetcache">{#media_dlg.targetcache}</label></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="qt_scale">{$lang_media_scale}</label></td>
                            <td><label for="qt_scale">{#media_dlg.scale}</label></td>
                            <td><select id="qt_scale" name="qt_scale" class="mceEditableSelect" onchange="generatePreview();">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="tofit">tofit</option>
                                    <option value="aspect">aspect</option>
                                </select>
@@ -342,31 +443,31 @@
                        </tr>
                        <tr>
                            <td><label for="qt_starttime">{$lang_media_starttime}</label></td>
                            <td><label for="qt_starttime">{#media_dlg.starttime}</label></td>
                            <td><input type="text" id="qt_starttime" name="qt_starttime" onchange="generatePreview();" /></td>
                            <td><label for="qt_endtime">{$lang_media_endtime}</label></td>
                            <td><label for="qt_endtime">{#media_dlg.endtime}</label></td>
                            <td><input type="text" id="qt_endtime" name="qt_endtime" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="qt_target">{$lang_media_target}</label></td>
                            <td><label for="qt_target">{#media_dlg.target}</label></td>
                            <td><input type="text" id="qt_target" name="qt_target" onchange="generatePreview();" /></td>
                            <td><label for="qt_href">{$lang_media_href}</label></td>
                            <td><label for="qt_href">{#media_dlg.href}</label></td>
                            <td><input type="text" id="qt_href" name="qt_href" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="qt_qtsrcchokespeed">{$lang_media_qtsrcchokespeed}</label></td>
                            <td><label for="qt_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>
                            <td><input type="text" id="qt_qtsrcchokespeed" name="qt_qtsrcchokespeed" onchange="generatePreview();" /></td>
                            <td><label for="qt_volume">{$lang_media_volume}</label></td>
                            <td><label for="qt_volume">{#media_dlg.volume}</label></td>
                            <td><input type="text" id="qt_volume" name="qt_volume" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="qt_qtsrc">{$lang_media_qtsrc}</label></td>
                            <td><label for="qt_qtsrc">{#media_dlg.qtsrc}</label></td>
                            <td colspan="4">
                            <table border="0" cellspacing="0" cellpadding="0">
                                  <tr>
@@ -380,7 +481,7 @@
                </fieldset>
                <fieldset id="wmp_options">
                    <legend>{$lang_media_wmp_options}</legend>
                    <legend>{#media_dlg.wmp_options}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
@@ -388,7 +489,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_autostart" name="wmp_autostart" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_autostart">{$lang_media_autostart}</label></td>
                                        <td><label for="wmp_autostart">{#media_dlg.autostart}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -397,7 +498,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_enabled" name="wmp_enabled" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_enabled">{$lang_media_enabled}</label></td>
                                        <td><label for="wmp_enabled">{#media_dlg.enabled}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -408,7 +509,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_enablecontextmenu" name="wmp_enablecontextmenu" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_enablecontextmenu">{$lang_media_menu}</label></td>
                                        <td><label for="wmp_enablecontextmenu">{#media_dlg.menu}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -417,7 +518,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_fullscreen" name="wmp_fullscreen" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_fullscreen">{$lang_media_fullscreen}</label></td>
                                        <td><label for="wmp_fullscreen">{#media_dlg.fullscreen}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -428,7 +529,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_invokeurls" name="wmp_invokeurls" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_invokeurls">{$lang_media_invokeurls}</label></td>
                                        <td><label for="wmp_invokeurls">{#media_dlg.invokeurls}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -437,7 +538,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_mute" name="wmp_mute" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_mute">{$lang_media_mute}</label></td>
                                        <td><label for="wmp_mute">{#media_dlg.mute}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -448,7 +549,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_stretchtofit" name="wmp_stretchtofit" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_stretchtofit">{$lang_media_stretchtofit}</label></td>
                                        <td><label for="wmp_stretchtofit">{#media_dlg.stretchtofit}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -457,49 +558,49 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="wmp_windowlessvideo" name="wmp_windowlessvideo" onchange="generatePreview();" /></td>
                                        <td><label for="wmp_windowlessvideo">{$lang_media_windowlessvideo}</label></td>
                                        <td><label for="wmp_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>
                                    </tr>
                                </table>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="wmp_balance">{$lang_media_balance}</label></td>
                            <td><label for="wmp_balance">{#media_dlg.balance}</label></td>
                            <td><input type="text" id="wmp_balance" name="wmp_balance" onchange="generatePreview();" /></td>
                            <td><label for="wmp_baseurl">{$lang_media_baseurl}</label></td>
                            <td><label for="wmp_baseurl">{#media_dlg.baseurl}</label></td>
                            <td><input type="text" id="wmp_baseurl" name="wmp_baseurl" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="wmp_captioningid">{$lang_media_captioningid}</label></td>
                            <td><label for="wmp_captioningid">{#media_dlg.captioningid}</label></td>
                            <td><input type="text" id="wmp_captioningid" name="wmp_captioningid" onchange="generatePreview();" /></td>
                            <td><label for="wmp_currentmarker">{$lang_media_currentmarker}</label></td>
                            <td><label for="wmp_currentmarker">{#media_dlg.currentmarker}</label></td>
                            <td><input type="text" id="wmp_currentmarker" name="wmp_currentmarker" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="wmp_currentposition">{$lang_media_currentposition}</label></td>
                            <td><label for="wmp_currentposition">{#media_dlg.currentposition}</label></td>
                            <td><input type="text" id="wmp_currentposition" name="wmp_currentposition" onchange="generatePreview();" /></td>
                            <td><label for="wmp_defaultframe">{$lang_media_defaultframe}</label></td>
                            <td><label for="wmp_defaultframe">{#media_dlg.defaultframe}</label></td>
                            <td><input type="text" id="wmp_defaultframe" name="wmp_defaultframe" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="wmp_playcount">{$lang_media_playcount}</label></td>
                            <td><label for="wmp_playcount">{#media_dlg.playcount}</label></td>
                            <td><input type="text" id="wmp_playcount" name="wmp_playcount" onchange="generatePreview();" /></td>
                            <td><label for="wmp_rate">{$lang_media_rate}</label></td>
                            <td><label for="wmp_rate">{#media_dlg.rate}</label></td>
                            <td><input type="text" id="wmp_rate" name="wmp_rate" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="wmp_uimode">{$lang_media_uimode}</label></td>
                            <td><label for="wmp_uimode">{#media_dlg.uimode}</label></td>
                            <td><input type="text" id="wmp_uimode" name="wmp_uimode" onchange="generatePreview();" /></td>
                            <td><label for="wmp_volume">{$lang_media_volume}</label></td>
                            <td><label for="wmp_volume">{#media_dlg.volume}</label></td>
                            <td><input type="text" id="wmp_volume" name="wmp_volume" onchange="generatePreview();" /></td>
                        </tr>
@@ -507,7 +608,7 @@
                </fieldset>
                <fieldset id="rmp_options">
                    <legend>{$lang_media_rmp_options}</legend>
                    <legend>{#media_dlg.rmp_options}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
@@ -515,7 +616,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_autostart" name="rmp_autostart" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_autostart">{$lang_media_autostart}</label></td>
                                        <td><label for="rmp_autostart">{#media_dlg.autostart}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -524,7 +625,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_loop" name="rmp_loop" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_loop">{$lang_media_loop}</label></td>
                                        <td><label for="rmp_loop">{#media_dlg.loop}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -535,7 +636,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_autogotourl" name="rmp_autogotourl" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_autogotourl">{$lang_media_autogotourl}</label></td>
                                        <td><label for="rmp_autogotourl">{#media_dlg.autogotourl}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -544,7 +645,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_center" name="rmp_center" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_center">{$lang_media_center}</label></td>
                                        <td><label for="rmp_center">{#media_dlg.center}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -555,7 +656,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_imagestatus" name="rmp_imagestatus" checked="checked" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_imagestatus">{$lang_media_imagestatus}</label></td>
                                        <td><label for="rmp_imagestatus">{#media_dlg.imagestatus}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -564,7 +665,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_maintainaspect" name="rmp_maintainaspect" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_maintainaspect">{$lang_media_maintainaspect}</label></td>
                                        <td><label for="rmp_maintainaspect">{#media_dlg.maintainaspect}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -575,7 +676,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_nojava" name="rmp_nojava" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_nojava">{$lang_media_nojava}</label></td>
                                        <td><label for="rmp_nojava">{#media_dlg.nojava}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -584,7 +685,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_prefetch" name="rmp_prefetch" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_prefetch">{$lang_media_prefetch}</label></td>
                                        <td><label for="rmp_prefetch">{#media_dlg.prefetch}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -595,7 +696,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="rmp_shuffle" name="rmp_shuffle" onchange="generatePreview();" /></td>
                                        <td><label for="rmp_shuffle">{$lang_media_shuffle}</label></td>
                                        <td><label for="rmp_shuffle">{#media_dlg.shuffle}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -606,57 +707,57 @@
                        </tr>
                        <tr>
                            <td><label for="rmp_console">{$lang_media_console}</label></td>
                            <td><label for="rmp_console">{#media_dlg.console}</label></td>
                            <td><input type="text" id="rmp_console" name="rmp_console" onchange="generatePreview();" /></td>
                            <td><label for="rmp_controls">{$lang_media_controls}</label></td>
                            <td><label for="rmp_controls">{#media_dlg.controls}</label></td>
                            <td><input type="text" id="rmp_controls" name="rmp_controls" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="rmp_numloop">{$lang_media_numloop}</label></td>
                            <td><label for="rmp_numloop">{#media_dlg.numloop}</label></td>
                            <td><input type="text" id="rmp_numloop" name="rmp_numloop" onchange="generatePreview();" /></td>
                            <td><label for="rmp_scriptcallbacks">{$lang_media_scriptcallbacks}</label></td>
                            <td><label for="rmp_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>
                            <td><input type="text" id="rmp_scriptcallbacks" name="rmp_scriptcallbacks" onchange="generatePreview();" /></td>
                        </tr>
                    </table>
                </fieldset>
                <fieldset id="shockwave_options">
                    <legend>{$lang_media_shockwave_options}</legend>
                    <legend>{#media_dlg.shockwave_options}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
                            <td><label for="shockwave_swstretchstyle">{$lang_media_swstretchstyle}</label></td>
                            <td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>
                            <td>
                                <select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="generatePreview();">
                                    <option value="none">{$lang_not_set}</option>
                                    <option value="none">{#not_set}</option>
                                    <option value="meet">Meet</option>
                                    <option value="fill">Fill</option>
                                    <option value="stage">Stage</option>
                                </select>
                            </td>
                            <td><label for="shockwave_swvolume">{$lang_media_volume}</label></td>
                            <td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>
                            <td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="generatePreview();" /></td>
                        </tr>
                        <tr>
                            <td><label for="shockwave_swstretchhalign">{$lang_media_swstretchhalign}</label></td>
                            <td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>
                            <td>
                                <select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="generatePreview();">
                                    <option value="none">{$lang_not_set}</option>
                                    <option value="left">{$lang_media_align_left}</option>
                                    <option value="center">{$lang_media_align_center}</option>
                                    <option value="right">{$lang_media_align_right}</option>
                                    <option value="none">{#not_set}</option>
                                    <option value="left">{#media_dlg.align_left}</option>
                                    <option value="center">{#media_dlg.align_center}</option>
                                    <option value="right">{#media_dlg.align_right}</option>
                                </select>
                            </td>
                            <td><label for="shockwave_swstretchvalign">{$lang_media_swstretchvalign}</label></td>
                            <td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>
                            <td>
                                <select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="generatePreview();">
                                    <option value="none">{$lang_not_set}</option>
                                    <option value="none">{#not_set}</option>
                                    <option value="meet">Meet</option>
                                    <option value="fill">Fill</option>
                                    <option value="stage">Stage</option>
@@ -669,7 +770,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="generatePreview();" checked="checked" /></td>
                                        <td><label for="shockwave_autostart">{$lang_media_autostart}</label></td>
                                        <td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -678,7 +779,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="generatePreview();" checked="checked" /></td>
                                        <td><label for="shockwave_sound">{$lang_media_sound}</label></td>
                                        <td><label for="shockwave_sound">{#media_dlg.sound}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -690,7 +791,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="generatePreview();" /></td>
                                        <td><label for="shockwave_swliveconnect">{$lang_media_liveconnect}</label></td>
                                        <td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -699,7 +800,7 @@
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
                                        <td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="generatePreview();" checked="checked" /></td>
                                        <td><label for="shockwave_progress">{$lang_media_progress}</label></td>
                                        <td><label for="shockwave_progress">{#media_dlg.progress}</label></td>
                                    </tr>
                                </table>
                            </td>
@@ -711,11 +812,11 @@
        <div class="mceActionPanel">
            <div style="float: left">
                <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertMedia();" />
                <input type="submit" id="insert" name="insert" value="{#insert}" />
            </div>
            <div style="float: right">
                <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
                <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
            </div>
        </div>
    </form>
program/js/tiny_mce/plugins/nonbreaking/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('nonbreaking');var TinyMCE_NonBreakingPlugin={getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},getControlHTML:function(cn){switch(cn){case"nonbreaking":return tinyMCE.getButtonHTML(cn,'lang_nonbreaking_desc','{$pluginurl}/images/nonbreaking.gif','mceNonBreaking',false)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),h;switch(command){case"mceNonBreaking":h=(inst.visualChars&&inst.visualChars.state)?'<span class="mceItemHiddenVisualChar">&middot;</span>':'&nbsp;';tinyMCE.execInstanceCommand(editor_id,'mceInsertContent',false,h);return true}return false},handleEvent:function(e){var inst,h;if(!tinyMCE.isOpera&&e.type=='keydown'&&e.keyCode==9&&tinyMCE.getParam('nonbreaking_force_tab',false)){inst=tinyMCE.selectedInstance;h=(inst.visualChars&&inst.visualChars.state)?'<span class="mceItemHiddenVisualChar">&middot;&middot;&middot;</span>':'&nbsp;&nbsp;&nbsp;';tinyMCE.execInstanceCommand(inst.editorId,'mceInsertContent',false,h);tinyMCE.cancelEvent(e);return false}return true}};tinyMCE.addPlugin("nonbreaking",TinyMCE_NonBreakingPlugin);
(function(){tinymce.create('tinymce.plugins.Nonbreaking',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceNonBreaking',function(){ed.execCommand('mceInsertContent',false,(ed.plugins.visualchars&&ed.plugins.visualchars.state)?'<span class="mceItemHidden mceVisualNbsp">&middot;</span>':'&nbsp;');});ed.addButton('nonbreaking',{title:'nonbreaking.nonbreaking_desc',cmd:'mceNonBreaking'});if(ed.getParam('nonbreaking_force_tab')){ed.onKeyDown.add(function(ed,e){if(tinymce.isIE&&e.keyCode==9){ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');ed.execCommand('mceNonBreaking');tinymce.dom.Event.cancel(e);}});}},getInfo:function(){return{longname:'Nonbreaking space',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('nonbreaking',tinymce.plugins.Nonbreaking);})();
program/js/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
@@ -1,62 +1,50 @@
/**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('nonbreaking');
(function() {
    tinymce.create('tinymce.plugins.Nonbreaking', {
        init : function(ed, url) {
            var t = this;
var TinyMCE_NonBreakingPlugin = {
            t.editor = ed;
            // Register commands
            ed.addCommand('mceNonBreaking', function() {
                ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span class="mceItemHidden mceVisualNbsp">&middot;</span>' : '&nbsp;');
            });
            // Register buttons
            ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});
            if (ed.getParam('nonbreaking_force_tab')) {
                ed.onKeyDown.add(function(ed, e) {
                    if (tinymce.isIE && e.keyCode == 9) {
                        ed.execCommand('mceNonBreaking');
                        ed.execCommand('mceNonBreaking');
                        ed.execCommand('mceNonBreaking');
                        tinymce.dom.Event.cancel(e);
                    }
                });
            }
        },
    getInfo : function() {
        return {
            longname : 'Nonbreaking space',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
                version : tinymce.majorVersion + "." + tinymce.minorVersion
        };
    },
    getControlHTML : function(cn) {
        switch (cn) {
            case "nonbreaking":
                return tinyMCE.getButtonHTML(cn, 'lang_nonbreaking_desc', '{$pluginurl}/images/nonbreaking.gif', 'mceNonBreaking', false);
        }
        return "";
    },
        // Private methods
    });
    execCommand : function(editor_id, element, command, user_interface, value) {
        var inst = tinyMCE.getInstanceById(editor_id), h;
        switch (command) {
            case "mceNonBreaking":
                h = (inst.visualChars && inst.visualChars.state) ? '<span class="mceItemHiddenVisualChar">&middot;</span>' : '&nbsp;';
                tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, h);
                return true;
        }
        return false;
    },
    handleEvent : function(e) {
        var inst, h;
        if (!tinyMCE.isOpera && e.type == 'keydown' && e.keyCode == 9 && tinyMCE.getParam('nonbreaking_force_tab', false)) {
            inst = tinyMCE.selectedInstance;
            h = (inst.visualChars && inst.visualChars.state) ? '<span class="mceItemHiddenVisualChar">&middot;&middot;&middot;</span>' : '&nbsp;&nbsp;&nbsp;';
            tinyMCE.execInstanceCommand(inst.editorId, 'mceInsertContent', false, h);
            tinyMCE.cancelEvent(e);
            return false;
        }
        return true;
    }
};
tinyMCE.addPlugin("nonbreaking", TinyMCE_NonBreakingPlugin);
    // Register plugin
    tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);
})();
program/js/tiny_mce/plugins/nonbreaking/images/nonbreaking.gif
Binary files differ
program/js/tiny_mce/plugins/nonbreaking/langs/en.js
File was deleted
program/js/tiny_mce/plugins/paste/blank.htm
New file
@@ -0,0 +1,22 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>blank_page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="css/blank.css" rel="stylesheet" type="text/css" />
<base target="_self" />
<script type="text/javascript">
function init() {
    if (parent.tinymce.isIE)
        document.body.contentEditable = true;
    else
        document.designMode = 'on';
    parent.initIframe(document);
    window.focus();
}
</script>
</head>
<body onload="init();">
</body>
</html>
program/js/tiny_mce/plugins/paste/css/blank.css
New file
@@ -0,0 +1,14 @@
html, body {height:98%}
body {
background-color: #FFFFFF;
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 10px;
scrollbar-3dlight-color: #F0F0EE;
scrollbar-arrow-color: #676662;
scrollbar-base-color: #F0F0EE;
scrollbar-darkshadow-color: #DDDDDD;
scrollbar-face-color: #E0E0DD;
scrollbar-highlight-color: #F0F0EE;
scrollbar-shadow-color: #F0F0EE;
scrollbar-track-color: #F5F5F5;
}
program/js/tiny_mce/plugins/paste/css/pasteword.css
New file
@@ -0,0 +1,3 @@
.sourceIframe {
    border: 1px solid #808080;
}
program/js/tiny_mce/plugins/paste/editor_plugin.js
New file
@@ -0,0 +1 @@
(function(){var Event=tinymce.dom.Event;tinymce.create('tinymce.plugins.PastePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mcePasteText',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pastetext.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(clipboardData.getData("Text"),true);}else t._insertText(v.html,v.linebreaks);});ed.addCommand('mcePasteWord',function(ui,v){if(ui){if((ed.getParam('paste_use_dialog',true))||(!tinymce.isIE)){ed.windowManager.open({file:url+'/pasteword.htm',width:450,height:400,inline:1},{plugin_url:url});}else t._insertText(t._clipboardHTML());}else t._insertWordContent(v);});ed.addCommand('mceSelectAll',function(){ed.execCommand('selectall');});ed.addButton('pastetext',{title:'paste.paste_text_desc',cmd:'mcePasteText',ui:true});ed.addButton('pasteword',{title:'paste.paste_word_desc',cmd:'mcePasteWord',ui:true});ed.addButton('selectall',{title:'paste.selectall_desc',cmd:'mceSelectAll'});if(ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onPaste.add(function(ed,e){return t._handlePasteEvent(e)});}if(!tinymce.isIE&&ed.getParam("paste_auto_cleanup_on_paste",false)){ed.onKeyDown.add(function(ed,e){if(e.ctrlKey&&e.keyCode==86){window.setTimeout(function(){ed.execCommand("mcePasteText",true);},1);Event.cancel(e);}});}},getInfo:function(){return{longname:'Paste text/word',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_handlePasteEvent:function(e){var html=this._clipboardHTML(),ed=this.editor,sel=ed.selection,r;if(ed&&(r=sel.getRng())&&r.text.length>0)ed.execCommand('delete');if(html&&html.length>0)ed.execCommand('mcePasteWord',false,html);return Event.cancel(e);},_insertText:function(content,bLinebreaks){if(content&&content.length>0){if(bLinebreaks){if(this.editor.getParam("paste_create_paragraphs",true)){var rl=this.editor.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);content=content.replace(/\r\n\r\n/g,'</p><p>');content=content.replace(/\r\r/g,'</p><p>');content=content.replace(/\n\n/g,'</p><p>');if((pos=content.indexOf('</p><p>'))!=-1){this.editor.execCommand("Delete");var node=this.editor.selection.getNode();var breakElms=[];do{if(node.nodeType==1){if(node.nodeName=="TD"||node.nodeName=="BODY")break;breakElms[breakElms.length]=node;}}while(node=node.parentNode);var before="",after="</p>";before+=content.substring(0,pos);for(var i=0;i<breakElms.length;i++){before+="</"+breakElms[i].nodeName+">";after+="<"+breakElms[(breakElms.length-1)-i].nodeName+">";}before+="<p>";content=before+content.substring(pos+7)+after;}}if(this.editor.getParam("paste_create_linebreaks",true)){content=content.replace(/\r\n/g,'<br />');content=content.replace(/\r/g,'<br />');content=content.replace(/\n/g,'<br />');}}this.editor.execCommand("mceInsertRawHTML",false,content);}},_insertWordContent:function(content){var t=this,ed=t.editor;if(content&&content.length>0){var bull=String.fromCharCode(8226);var middot=String.fromCharCode(183);if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','before',content);var rl=ed.getParam("paste_replace_list",'\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');for(var i=0;i<rl.length;i+=2)content=content.replace(new RegExp(rl[i],'gi'),rl[i+1]);if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>','gi'),'<p><b>$1</b></p>');}content=content.replace(new RegExp('tab-stops: list [0-9]+.0pt">','gi'),'">'+"--list--");content=content.replace(new RegExp(bull+"(.*?)<BR>","gi"),"<p>"+middot+"$1</p>");content=content.replace(new RegExp('<SPAN style="mso-list: Ignore">','gi'),"<span>"+bull);content=content.replace(/<o:p><\/o:p>/gi,"");content=content.replace(new RegExp('<br style="page-break-before: always;.*>','gi'),'-- page break --');content=content.replace(new RegExp('<(!--)([^>]*)(--)>','g'),"");if(this.editor.getParam("paste_remove_spans",true))content=content.replace(/<\/?span[^>]*>/gi,"");if(this.editor.getParam("paste_remove_styles",true))content=content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)','gi'),"<$1$3");content=content.replace(/<\/?font[^>]*>/gi,"");switch(this.editor.getParam("paste_strip_class_attributes","all")){case"all":content=content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi,"<$1$3");break;case"mso":content=content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)','gi'),"<$1$3");break;}content=content.replace(new RegExp('href="?'+this._reEscape(""+document.location)+'','gi'),'href="'+this.editor.documentBaseURI.getURI());content=content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi,"<$1$3");content=content.replace(/<\\?\?xml[^>]*>/gi,"");content=content.replace(/<\/?\w+:[^>]*>/gi,"");content=content.replace(/-- page break --\s*<p>&nbsp;<\/p>/gi,"");content=content.replace(/-- page break --/gi,"");if(!this.editor.getParam('force_p_newlines')){content=content.replace('','','gi');content=content.replace('</p>','<br /><br />','gi');}if(!tinymce.isIE&&!this.editor.getParam('force_p_newlines')){content=content.replace(/<\/?p[^>]*>/gi,"");}content=content.replace(/<\/?div[^>]*>/gi,"");if(this.editor.getParam("paste_convert_middot_lists",true)){var div=ed.dom.create("div",null,content);var className=this.editor.getParam("paste_unindented_list_class","unIndentedList");while(this._convertMiddots(div,"--list--"));while(this._convertMiddots(div,middot,className));while(this._convertMiddots(div,bull));content=div.innerHTML;}if(this.editor.getParam("paste_convert_headers_to_strong",false)){content=content.replace(/<h[1-6]>&nbsp;<\/h[1-6]>/gi,'<p>&nbsp;&nbsp;</p>');content=content.replace(/<h[1-6]>/gi,'<p><b>');content=content.replace(/<\/h[1-6]>/gi,'</b></p>');content=content.replace(/<b>&nbsp;<\/b>/gi,'<b>&nbsp;&nbsp;</b>');content=content.replace(/^(&nbsp;)*/gi,'');}content=content.replace(/--list--/gi,"");if(ed.getParam('paste_insert_word_content_callback'))content=ed.execCallback('paste_insert_word_content_callback','after',content);this.editor.execCommand("mceInsertContent",false,content);if(this.editor.getParam('paste_force_cleanup_wordpaste',true)){var ed=this.editor;window.setTimeout(function(){ed.execCommand("mceCleanup");},1);}}},_reEscape:function(s){var l="?.\\*[](){}+^$:";var o="";for(var i=0;i<s.length;i++){var c=s.charAt(i);if(l.indexOf(c)!=-1)o+='\\'+c;else o+=c;}return o;},_convertMiddots:function(div,search,class_name){var ed=this.editor,mdot=String.fromCharCode(183),bull=String.fromCharCode(8226);var nodes,prevul,i,p,ul,li,np,cp,li;nodes=div.getElementsByTagName("p");for(i=0;i<nodes.length;i++){p=nodes[i];if(p.innerHTML.indexOf(search)==0){ul=ed.dom.create("ul");if(class_name)ul.className=class_name;li=ed.dom.create("li");li.innerHTML=p.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--|&nbsp;',"gi"),'');ul.appendChild(li);np=p.nextSibling;while(np){if(np.nodeType==3&&new RegExp('^\\s$','m').test(np.nodeValue)){np=np.nextSibling;continue;}if(search==mdot){if(np.nodeType==1&&new RegExp('^o(\\s+|&nbsp;)').test(np.innerHTML)){if(!prevul){prevul=ul;ul=ed.dom.create("ul");prevul.appendChild(ul);}np.innerHTML=np.innerHTML.replace(/^o/,'');}else{if(prevul){ul=prevul;prevul=null;}if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}}else{if(np.nodeType!=1||np.innerHTML.indexOf(search)!=0)break;}cp=np.nextSibling;li=ed.dom.create("li");li.innerHTML=np.innerHTML.replace(new RegExp(''+mdot+'|'+bull+'|--list--|&nbsp;',"gi"),'');np.parentNode.removeChild(np);ul.appendChild(li);np=cp;}p.parentNode.replaceChild(ul,p);return true;}}return false;},_clipboardHTML:function(){var div=document.getElementById('_TinyMCE_clipboardHTML');if(!div){var div=document.createElement('DIV');div.id='_TinyMCE_clipboardHTML';with(div.style){visibility='hidden';overflow='hidden';position='absolute';width=1;height=1;}document.body.appendChild(div);}div.innerHTML='';var rng=document.body.createTextRange();rng.moveToElementText(div);rng.execCommand('Paste');var html=div.innerHTML;div.innerHTML='';return html;}});tinymce.PluginManager.add('paste',tinymce.plugins.PastePlugin);})();
program/js/tiny_mce/plugins/paste/editor_plugin_src.js
New file
@@ -0,0 +1,387 @@
/**
 * $Id: editor_plugin_src.js 738 2008-03-20 20:00:48Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    var Event = tinymce.dom.Event;
    tinymce.create('tinymce.plugins.PastePlugin', {
        init : function(ed, url) {
            var t = this;
            t.editor = ed;
            // Register commands
            ed.addCommand('mcePasteText', function(ui, v) {
                if (ui) {
                    if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {
                        ed.windowManager.open({
                            file : url + '/pastetext.htm',
                            width : 450,
                            height : 400,
                            inline : 1
                        }, {
                            plugin_url : url
                        });
                    } else
                        t._insertText(clipboardData.getData("Text"), true);
                } else
                    t._insertText(v.html, v.linebreaks);
            });
            ed.addCommand('mcePasteWord', function(ui, v) {
                if (ui) {
                    if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) {
                        ed.windowManager.open({
                            file : url + '/pasteword.htm',
                            width : 450,
                            height : 400,
                            inline : 1
                        }, {
                            plugin_url : url
                        });
                    } else
                        t._insertText(t._clipboardHTML());
                } else
                    t._insertWordContent(v);
            });
            ed.addCommand('mceSelectAll', function() {
                ed.execCommand('selectall');
            });
            // Register buttons
            ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText', ui : true});
            ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord', ui : true});
            ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'mceSelectAll'});
            if (ed.getParam("paste_auto_cleanup_on_paste", false)) {
                ed.onPaste.add(function(ed, e) {
                    return t._handlePasteEvent(e)
                });
            }
            if (!tinymce.isIE && ed.getParam("paste_auto_cleanup_on_paste", false)) {
                // Force paste dialog if non IE browser
                ed.onKeyDown.add(function(ed, e) {
                    if (e.ctrlKey && e.keyCode == 86) {
                        window.setTimeout(function() {
                            ed.execCommand("mcePasteText", true);
                        }, 1);
                        Event.cancel(e);
                    }
                });
            }
        },
        getInfo : function() {
            return {
                longname : 'Paste text/word',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
        },
        // Private methods
        _handlePasteEvent : function(e) {
            var html = this._clipboardHTML(), ed = this.editor, sel = ed.selection, r;
            // Removes italic, strong etc, the if was needed due to bug #1437114
            if (ed && (r = sel.getRng()) && r.text.length > 0)
                ed.execCommand('delete');
            if (html && html.length > 0)
                ed.execCommand('mcePasteWord', false, html);
            return Event.cancel(e);
        },
        _insertText : function(content, bLinebreaks) {
            if (content && content.length > 0) {
                if (bLinebreaks) {
                    // Special paragraph treatment
                    if (this.editor.getParam("paste_create_paragraphs", true)) {
                        var rl = this.editor.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');
                        for (var i=0; i<rl.length; i+=2)
                            content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);
                        content = content.replace(/\r\n\r\n/g, '</p><p>');
                        content = content.replace(/\r\r/g, '</p><p>');
                        content = content.replace(/\n\n/g, '</p><p>');
                        // Has paragraphs
                        if ((pos = content.indexOf('</p><p>')) != -1) {
                            this.editor.execCommand("Delete");
                            var node = this.editor.selection.getNode();
                            // Get list of elements to break
                            var breakElms = [];
                            do {
                                if (node.nodeType == 1) {
                                    // Don't break tables and break at body
                                    if (node.nodeName == "TD" || node.nodeName == "BODY")
                                        break;
                                    breakElms[breakElms.length] = node;
                                }
                            } while(node = node.parentNode);
                            var before = "", after = "</p>";
                            before += content.substring(0, pos);
                            for (var i=0; i<breakElms.length; i++) {
                                before += "</" + breakElms[i].nodeName + ">";
                                after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">";
                            }
                            before += "<p>";
                            content = before + content.substring(pos+7) + after;
                        }
                    }
                    if (this.editor.getParam("paste_create_linebreaks", true)) {
                        content = content.replace(/\r\n/g, '<br />');
                        content = content.replace(/\r/g, '<br />');
                        content = content.replace(/\n/g, '<br />');
                    }
                }
                this.editor.execCommand("mceInsertRawHTML", false, content);
            }
        },
        _insertWordContent : function(content) {
            var t = this, ed = t.editor;
            if (content && content.length > 0) {
                // Cleanup Word content
                var bull = String.fromCharCode(8226);
                var middot = String.fromCharCode(183);
                if (ed.getParam('paste_insert_word_content_callback'))
                    content = ed.execCallback('paste_insert_word_content_callback', 'before', content);
                var rl = ed.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');
                for (var i=0; i<rl.length; i+=2)
                    content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);
                if (this.editor.getParam("paste_convert_headers_to_strong", false)) {
                    content = content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>', 'gi'), '<p><b>$1</b></p>');
                }
                content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--");
                content = content.replace(new RegExp(bull + "(.*?)<BR>", "gi"), "<p>" + middot + "$1</p>");
                content = content.replace(new RegExp('<SPAN style="mso-list: Ignore">', 'gi'), "<span>" + bull); // Covert to bull list
                content = content.replace(/<o:p><\/o:p>/gi, "");
                content = content.replace(new RegExp('<br style="page-break-before: always;.*>', 'gi'), '-- page break --'); // Replace pagebreaks
                content = content.replace(new RegExp('<(!--)([^>]*)(--)>', 'g'), "");  // Word comments
                if (this.editor.getParam("paste_remove_spans", true))
                    content = content.replace(/<\/?span[^>]*>/gi, "");
                if (this.editor.getParam("paste_remove_styles", true))
                    content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3");
                content = content.replace(/<\/?font[^>]*>/gi, "");
                // Strips class attributes.
                switch (this.editor.getParam("paste_strip_class_attributes", "all")) {
                    case "all":
                        content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3");
                        break;
                    case "mso":
                        content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3");
                        break;
                }
                content = content.replace(new RegExp('href="?' + this._reEscape("" + document.location) + '', 'gi'), 'href="' + this.editor.documentBaseURI.getURI());
                content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3");
                content = content.replace(/<\\?\?xml[^>]*>/gi, "");
                content = content.replace(/<\/?\w+:[^>]*>/gi, "");
                content = content.replace(/-- page break --\s*<p>&nbsp;<\/p>/gi, ""); // Remove pagebreaks
                content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks
        //        content = content.replace(/\/?&nbsp;*/gi, ""); &nbsp;
        //        content = content.replace(/<p>&nbsp;<\/p>/gi, '');
                if (!this.editor.getParam('force_p_newlines')) {
                    content = content.replace('', '' ,'gi');
                    content = content.replace('</p>', '<br /><br />' ,'gi');
                }
                if (!tinymce.isIE && !this.editor.getParam('force_p_newlines')) {
                    content = content.replace(/<\/?p[^>]*>/gi, "");
                }
                content = content.replace(/<\/?div[^>]*>/gi, "");
                // Convert all middlot lists to UL lists
                if (this.editor.getParam("paste_convert_middot_lists", true)) {
                    var div = ed.dom.create("div", null, content);
                    // Convert all middot paragraphs to li elements
                    var className = this.editor.getParam("paste_unindented_list_class", "unIndentedList");
                    while (this._convertMiddots(div, "--list--")) ; // bull
                    while (this._convertMiddots(div, middot, className)) ; // Middot
                    while (this._convertMiddots(div, bull)) ; // bull
                    content = div.innerHTML;
                }
                // Replace all headers with strong and fix some other issues
                if (this.editor.getParam("paste_convert_headers_to_strong", false)) {
                    content = content.replace(/<h[1-6]>&nbsp;<\/h[1-6]>/gi, '<p>&nbsp;&nbsp;</p>');
                    content = content.replace(/<h[1-6]>/gi, '<p><b>');
                    content = content.replace(/<\/h[1-6]>/gi, '</b></p>');
                    content = content.replace(/<b>&nbsp;<\/b>/gi, '<b>&nbsp;&nbsp;</b>');
                    content = content.replace(/^(&nbsp;)*/gi, '');
                }
                content = content.replace(/--list--/gi, ""); // Remove --list--
                if (ed.getParam('paste_insert_word_content_callback'))
                    content = ed.execCallback('paste_insert_word_content_callback', 'after', content);
                // Insert cleaned content
                this.editor.execCommand("mceInsertContent", false, content);
                if (this.editor.getParam('paste_force_cleanup_wordpaste', true)) {
                    var ed = this.editor;
                    window.setTimeout(function() {
                        ed.execCommand("mceCleanup");
                    }, 1); // Do normal cleanup detached from this thread
                }
            }
        },
        _reEscape : function(s) {
            var l = "?.\\*[](){}+^$:";
            var o = "";
            for (var i=0; i<s.length; i++) {
                var c = s.charAt(i);
                if (l.indexOf(c) != -1)
                    o += '\\' + c;
                else
                    o += c;
            }
            return o;
        },
        _convertMiddots : function(div, search, class_name) {
            var ed = this.editor, mdot = String.fromCharCode(183), bull = String.fromCharCode(8226);
            var nodes, prevul, i, p, ul, li, np, cp, li;
            nodes = div.getElementsByTagName("p");
            for (i=0; i<nodes.length; i++) {
                p = nodes[i];
                // Is middot
                if (p.innerHTML.indexOf(search) == 0) {
                    ul = ed.dom.create("ul");
                    if (class_name)
                        ul.className = class_name;
                    // Add the first one
                    li = ed.dom.create("li");
                    li.innerHTML = p.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--|&nbsp;', "gi"), '');
                    ul.appendChild(li);
                    // Add the rest
                    np = p.nextSibling;
                    while (np) {
                        // If the node is whitespace, then
                        // ignore it and continue on.
                        if (np.nodeType == 3 && new RegExp('^\\s$', 'm').test(np.nodeValue)) {
                                np = np.nextSibling;
                                continue;
                        }
                        if (search == mdot) {
                                if (np.nodeType == 1 && new RegExp('^o(\\s+|&nbsp;)').test(np.innerHTML)) {
                                        // Second level of nesting
                                        if (!prevul) {
                                                prevul = ul;
                                                ul = ed.dom.create("ul");
                                                prevul.appendChild(ul);
                                        }
                                        np.innerHTML = np.innerHTML.replace(/^o/, '');
                                } else {
                                        // Pop the stack if we're going back up to the first level
                                        if (prevul) {
                                                ul = prevul;
                                                prevul = null;
                                        }
                                        // Not element or middot paragraph
                                        if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)
                                                break;
                                }
                        } else {
                                // Not element or middot paragraph
                                if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)
                                        break;
                            }
                        cp = np.nextSibling;
                        li = ed.dom.create("li");
                        li.innerHTML = np.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--|&nbsp;', "gi"), '');
                        np.parentNode.removeChild(np);
                        ul.appendChild(li);
                        np = cp;
                    }
                    p.parentNode.replaceChild(ul, p);
                    return true;
                }
            }
            return false;
        },
        _clipboardHTML : function() {
            var div = document.getElementById('_TinyMCE_clipboardHTML');
            if (!div) {
                var div = document.createElement('DIV');
                div.id = '_TinyMCE_clipboardHTML';
                with (div.style) {
                    visibility = 'hidden';
                    overflow = 'hidden';
                    position = 'absolute';
                    width = 1;
                    height = 1;
                }
                document.body.appendChild(div);
            }
            div.innerHTML = '';
            var rng = document.body.createTextRange();
            rng.moveToElementText(div);
            rng.execCommand('Paste');
            var html = div.innerHTML;
            div.innerHTML = '';
            return html;
        }
    });
    // Register plugin
    tinymce.PluginManager.add('paste', tinymce.plugins.PastePlugin);
})();
program/js/tiny_mce/plugins/paste/js/pastetext.js
New file
@@ -0,0 +1,42 @@
tinyMCEPopup.requireLangPack();
function saveContent() {
    if (document.forms[0].htmlSource.value == '') {
        tinyMCEPopup.close();
        return false;
    }
    tinyMCEPopup.execCommand('mcePasteText', false, {
        html : document.forms[0].htmlSource.value,
        linebreaks : document.forms[0].linebreaks.checked
    });
    tinyMCEPopup.close();
}
function onLoadInit() {
    tinyMCEPopup.resizeToInnerSize();
    // Remove Gecko spellchecking
    if (tinymce.isGecko)
        document.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");
    resizeInputs();
}
var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
function resizeInputs() {
    if (!tinymce.isIE) {
        wHeight = self.innerHeight-80;
        wWidth = self.innerWidth-17;
    } else {
        wHeight = document.body.clientHeight-80;
        wWidth = document.body.clientWidth-17;
    }
    document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px';
    document.forms[0].htmlSource.style.width  = Math.abs(wWidth) + 'px';
}
tinyMCEPopup.onInit.add(onLoadInit);
program/js/tiny_mce/plugins/paste/js/pasteword.js
New file
@@ -0,0 +1,56 @@
tinyMCEPopup.requireLangPack();
function saveContent() {
    var html = document.getElementById("frmData").contentWindow.document.body.innerHTML;
    if (html == ''){
        tinyMCEPopup.close();
        return false;
    }
    tinyMCEPopup.execCommand('mcePasteWord', false, html);
    tinyMCEPopup.close();
}
function onLoadInit() {
    tinyMCEPopup.resizeToInnerSize();
    // Fix for endless reloading in FF
    window.setTimeout(createIFrame, 10);
}
function createIFrame() {
    document.getElementById('iframecontainer').innerHTML = '<iframe id="frmData" name="frmData" class="sourceIframe" src="blank.htm" height="280" width="400" frameborder="0" style="background-color:#FFFFFF; width:100%;" dir="ltr" wrap="soft"></iframe>';
}
var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
function initIframe(doc) {
    var dir = tinyMCEPopup.editor.settings.directionality;
    doc.body.dir = dir;
    // Remove Gecko spellchecking
    if (tinymce.isGecko)
        doc.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");
    resizeInputs();
}
function resizeInputs() {
    if (!tinymce.isIE) {
        wHeight = self.innerHeight - 80;
        wWidth = self.innerWidth - 18;
    } else {
        wHeight = document.body.clientHeight - 80;
        wWidth = document.body.clientWidth - 18;
    }
    var elm = document.getElementById('frmData');
    if (elm) {
        elm.style.height = Math.abs(wHeight) + 'px';
        elm.style.width  = Math.abs(wWidth) + 'px';
    }
}
tinyMCEPopup.onInit.add(onLoadInit);
program/js/tiny_mce/plugins/paste/langs/en_dlg.js
New file
@@ -0,0 +1,5 @@
tinyMCE.addI18n('en.paste_dlg',{
text_title:"Use CTRL+V on your keyboard to paste the text into the window.",
text_linebreaks:"Keep linebreaks",
word_title:"Use CTRL+V on your keyboard to paste the text into the window."
});
program/js/tiny_mce/plugins/paste/pastetext.htm
New file
@@ -0,0 +1,34 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#paste.paste_text_desc}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/pastetext.js"></script>
    <base target="_self" />
</head>
<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
<form name="source" onsubmit="saveContent();return false;" action="#">
    <div style="float: left" class="title">{#paste.paste_text_desc}</div>
    <div style="float: right">
        <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>
    </div>
    <br style="clear: both" />
    <div>{#paste_dlg.text_title}</div>
    <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" name="insert" value="{#insert}" id="insert" />
        </div>
        <div style="float: right">
            <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/paste/pasteword.htm
New file
@@ -0,0 +1,29 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>{#paste.paste_word_desc}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/pasteword.js"></script>
    <link href="css/pasteword.css" rel="stylesheet" type="text/css" />
    <base target="_self" />
</head>
<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
    <form name="source" onsubmit="saveContent();" action="#">
        <div class="title">{#paste.paste_word_desc}</div>
        <div>{#paste_dlg.word_title}</div>
        <div id="iframecontainer"></div>
        <div class="mceActionPanel">
            <div style="float: left">
                <input type="button" id="insert" name="insert" value="{#insert}" onclick="saveContent();" />
            </div>
            <div style="float: right">
                <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
            </div>
        </div>
    </form>
</body>
</html>
program/js/tiny_mce/plugins/readme.txt
File was deleted
program/js/tiny_mce/plugins/searchreplace/css/searchreplace.css
@@ -1,20 +1,6 @@
/* stylesheet for advsearchreplace plugin*/
.panel_wrapper { height: 85px; }
.panel_wrapper div.current { height: 85px; }
/* MS IE only styles */
/* IE */
* html .panel_wrapper { height: 100px; }
* html .panel_wrapper div.current { height: 100px; }
#replaceBtn, #replaceAllBtn {
    padding-bottom: 2px;
    font-weight: bold;
    width: 90px;
    height: 21px;
    border: 0;
    cursor: pointer;
}
#replaceBtn { background: url(../images/replace_button_bg.gif); }
#replaceAllBtn { background: url(../images/replace_all_button_bg.gif); }
program/js/tiny_mce/plugins/searchreplace/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('searchreplace');var TinyMCE_SearchReplacePlugin={getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){inst.addShortcut('ctrl','f','lang_searchreplace_search_desc','mceSearch',true);},getControlHTML:function(cn){switch(cn){case"search":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_search_desc','{$pluginurl}/images/search.gif','mceSearch',true);case"replace":return tinyMCE.getButtonHTML(cn,'lang_searchreplace_replace_desc','{$pluginurl}/images/replace.gif','mceSearchReplace',true)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),selectedText=inst.selection.getSelectedText(),rng;function defValue(key,default_value){value[key]=typeof(value[key])=="undefined"?default_value:value[key]}function replaceSel(search_str,str,back){if(!inst.selection.isCollapsed()){if(tinyMCE.isRealIE)inst.selection.getRng().duplicate().pasteHTML(str);else inst.execCommand('mceInsertContent',false,str)}}if(!value)value=[];defValue("editor_id",editor_id);defValue("searchstring",selectedText);defValue("replacestring",null);defValue("replacemode","none");defValue("casesensitive",false);defValue("backwards",false);defValue("wrap",false);defValue("wholeword",false);defValue("inline","yes");defValue("resizable","no");switch(command){case"mceSearch":if(user_interface){var template=new Array();template['file']='../../plugins/searchreplace/searchreplace.htm';template['width']=380;template['height']=155+(tinyMCE.isNS7?20:0)+(tinyMCE.isMSIE?15:0);template['width']+=tinyMCE.getLang('lang_searchreplace_delta_width',0);template['height']+=tinyMCE.getLang('lang_searchreplace_delta_height',0);inst.selection.collapse(true);tinyMCE.openWindow(template,value)}else{var win=tinyMCE.getInstanceById(editor_id).contentWindow;var doc=tinyMCE.getInstanceById(editor_id).contentWindow.document;var body=tinyMCE.getInstanceById(editor_id).contentWindow.document.body;var awin=value.win,found;if(body.innerHTML==""){awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(value['replacemode']=="current"){replaceSel(value['string'],value['replacestring'],value['backwards']);value['replacemode']="none";}inst.selection.collapse(value['backwards']);if(tinyMCE.isMSIE){var rng=inst.selection.getRng();var flags=0;if(value['wholeword'])flags=flags|2;if(value['casesensitive'])flags=flags|4;if(!rng.findText){awin.alert('This operation is currently not supported by this browser.');return true}if(value['replacemode']=="all"){found=false;while(rng.findText(value['string'],value['backwards']?-1:1,flags)){found=true;rng.scrollIntoView();rng.select();replaceSel(value['string'],value['replacestring'],value['backwards'])}if(found)awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select()}else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'))}else{if(value['replacemode']=="all"){found=false;while(win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false)){found=true;replaceSel(value['string'],value['replacestring'],value['backwards'])}if(found)awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));else awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true}if(!win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'))}}return true;case"mceSearchReplace":value['replacestring']="";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true}return false}};tinyMCE.addPlugin("searchreplace",TinyMCE_SearchReplacePlugin);
(function(){tinymce.create('tinymce.plugins.SearchReplacePlugin',{init:function(ed,url){function open(m){ed.windowManager.open({file:url+'/searchreplace.htm',width:420+parseInt(ed.getLang('searchreplace.delta_width',0)),height:160+parseInt(ed.getLang('searchreplace.delta_height',0)),inline:1,auto_focus:0},{mode:m,search_string:ed.selection.getContent({format:'text'}),plugin_url:url});};ed.addCommand('mceSearch',function(){open('search');});ed.addCommand('mceReplace',function(){open('replace');});ed.addButton('search',{title:'searchreplace.search_desc',cmd:'mceSearch'});ed.addButton('replace',{title:'searchreplace.replace_desc',cmd:'mceReplace'});ed.addShortcut('ctrl+f','searchreplace.search_desc','mceSearch');},getInfo:function(){return{longname:'Search/Replace',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('searchreplace',tinymce.plugins.SearchReplacePlugin);})();
program/js/tiny_mce/plugins/searchreplace/editor_plugin_src.js
@@ -1,173 +1,54 @@
/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 * $Id: editor_plugin_src.js 686 2008-03-09 18:13:49Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
tinyMCE.importPluginLanguagePack('searchreplace');
(function() {
    tinymce.create('tinymce.plugins.SearchReplacePlugin', {
        init : function(ed, url) {
            function open(m) {
                ed.windowManager.open({
                    file : url + '/searchreplace.htm',
                    width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),
                    height : 160 + parseInt(ed.getLang('searchreplace.delta_height', 0)),
                    inline : 1,
                    auto_focus : 0
                }, {
                    mode : m,
                    search_string : ed.selection.getContent({format : 'text'}),
                    plugin_url : url
                });
            };
var TinyMCE_SearchReplacePlugin = {
            // Register commands
            ed.addCommand('mceSearch', function() {
                open('search');
            });
            ed.addCommand('mceReplace', function() {
                open('replace');
            });
            // Register buttons
            ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});
            ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});
            ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');
        },
    getInfo : function() {
        return {
            longname : 'Search/Replace',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
                version : tinymce.majorVersion + "." + tinymce.minorVersion
        };
    },
    initInstance : function (inst) {
        inst.addShortcut('ctrl', 'f', 'lang_searchreplace_search_desc', 'mceSearch', true);
        // No CTRL+R for "replace" because browsers will reload page instead of executing plugin
    },
    getControlHTML : function (cn) {
        switch (cn) {
            case "search" :
                return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_search_desc', '{$pluginurl}/images/search.gif','mceSearch', true);
            case "replace" :
                return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_replace_desc', '{$pluginurl}/images/replace.gif', 'mceSearchReplace', true);
        }
    });
        return "";
    },
    execCommand : function (editor_id, element, command, user_interface, value) {
        var inst = tinyMCE.getInstanceById(editor_id), selectedText = inst.selection.getSelectedText(), rng;
        function defValue(key, default_value) {
            value[key] = typeof(value[key]) == "undefined" ? default_value : value[key];
        }
        function replaceSel(search_str, str, back) {
            if (!inst.selection.isCollapsed()) {
                if (tinyMCE.isRealIE)
                    inst.selection.getRng().duplicate().pasteHTML(str); // Needs to be duplicated due to selection bug in IE
                else
                    inst.execCommand('mceInsertContent', false, str);
            }
        }
        if (!value)
            value = [];
        defValue("editor_id", editor_id);
        defValue("searchstring", selectedText);
        defValue("replacestring", null);
        defValue("replacemode", "none");
        defValue("casesensitive", false);
        defValue("backwards", false);
        defValue("wrap", false);
        defValue("wholeword", false);
        defValue("inline", "yes");
        defValue("resizable", "no");
        switch (command) {
            case "mceSearch" :
                if (user_interface) {
                    var template = new Array();
                    template['file'] = '../../plugins/searchreplace/searchreplace.htm';
                    template['width'] = 380;
                    template['height'] = 155 + (tinyMCE.isNS7 ? 20 : 0) + (tinyMCE.isMSIE ? 15 : 0);
                    template['width'] += tinyMCE.getLang('lang_searchreplace_delta_width', 0);
                    template['height'] += tinyMCE.getLang('lang_searchreplace_delta_height', 0);
                    inst.selection.collapse(true);
                    tinyMCE.openWindow(template, value);
                } else {
                    var win = tinyMCE.getInstanceById(editor_id).contentWindow;
                    var doc = tinyMCE.getInstanceById(editor_id).contentWindow.document;
                    var body = tinyMCE.getInstanceById(editor_id).contentWindow.document.body;
                    var awin = value.win, found;
                    if (body.innerHTML == "") {
                        awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
                        return true;
                    }
                    if (value['replacemode'] == "current") {
                        replaceSel(value['string'], value['replacestring'], value['backwards']);
                        value['replacemode'] = "none";
                        //tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value);
                        //return true;
                    }
                    inst.selection.collapse(value['backwards']);
                    if (tinyMCE.isMSIE) {
                        var rng = inst.selection.getRng();
                        var flags = 0;
                        if (value['wholeword'])
                            flags = flags | 2;
                        if (value['casesensitive'])
                            flags = flags | 4;
                        if (!rng.findText) {
                            awin.alert('This operation is currently not supported by this browser.');
                            return true;
                        }
                        if (value['replacemode'] == "all") {
                            found = false;
                            while (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) {
                                found = true;
                                rng.scrollIntoView();
                                rng.select();
                                replaceSel(value['string'], value['replacestring'], value['backwards']);
                            }
                            if (found)
                                awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));
                            else
                                awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
                            return true;
                        }
                        if (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) {
                            rng.scrollIntoView();
                            rng.select();
                        } else
                            awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
                    } else {
                        if (value['replacemode'] == "all") {
                            found = false;
                            while (win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) {
                                found = true;
                                replaceSel(value['string'], value['replacestring'], value['backwards']);
                            }
                            if (found)
                                awin.alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));
                            else
                                awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
                            return true;
                        }
                        if (!win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false))
                            awin.alert(tinyMCE.getLang('lang_searchreplace_notfound'));
                    }
                }
                return true;
            case "mceSearchReplace" :
                value['replacestring'] = "";
                tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false);
                return true;
        }
        return false;
    }
};
tinyMCE.addPlugin("searchreplace", TinyMCE_SearchReplacePlugin);
    // Register plugin
    tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);
})();
program/js/tiny_mce/plugins/searchreplace/images/replace.gif
Binary files differ
program/js/tiny_mce/plugins/searchreplace/images/replace_all_button_bg.gif
Binary files differ
program/js/tiny_mce/plugins/searchreplace/images/replace_button_bg.gif
Binary files differ
program/js/tiny_mce/plugins/searchreplace/images/search.gif
Binary files differ
program/js/tiny_mce/plugins/searchreplace/js/searchreplace.js
New file
@@ -0,0 +1,117 @@
tinyMCEPopup.requireLangPack();
var SearchReplaceDialog = {
    init : function(ed) {
        var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");
        this.switchMode(m);
        f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");
        // Focus input field
        f[m + '_panel_searchstring'].focus();
    },
    switchMode : function(m) {
        var f, lm = this.lastMode;
        if (lm != m) {
            f = document.forms[0];
            if (lm) {
                f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;
                f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;
                f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;
                f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;
            }
            mcTabs.displayTab(m + '_tab',  m + '_panel');
            document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";
            document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";
            this.lastMode = m;
        }
    },
    searchNext : function(a) {
        var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;
        // Get input
        f = document.forms[0];
        s = f[m + '_panel_searchstring'].value;
        b = f[m + '_panel_backwardsu'].checked;
        ca = f[m + '_panel_casesensitivebox'].checked;
        rs = f['replace_panel_replacestring'].value;
        function fix() {
            // Correct Firefox graphics glitches
            r = se.getRng().cloneRange();
            ed.getDoc().execCommand('SelectAll', false, null);
            se.setRng(r);
        };
        function replace() {
            if (tinymce.isIE)
                ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE
            else
                ed.getDoc().execCommand('InsertHTML', false, rs);
        };
        // IE flags
        if (ca)
            fl = fl | 4;
        switch (a) {
            case 'all':
                if (tinymce.isIE) {
                    while (r.findText(s, b ? -1 : 1, fl)) {
                        r.scrollIntoView();
                        r.select();
                        replace();
                        fo = 1;
                    }
                    tinyMCEPopup.storeSelection();
                } else {
                    while (w.find(s, ca, b, false, false, false, false)) {
                        replace();
                        fo = 1;
                    }
                }
                if (fo)
                    wm.alert(ed.getLang('searchreplace_dlg.allreplaced'));
                else
                    wm.alert(ed.getLang('searchreplace_dlg.notfound'));
                return;
            case 'current':
                replace();
                break;
        }
        se.collapse(b);
        r = se.getRng();
        // Whats the point
        if (!s)
            return;
        if (tinymce.isIE) {
            if (r.findText(s, b ? -1 : 1, fl)) {
                r.scrollIntoView();
                r.select();
            } else
                wm.alert(ed.getLang('searchreplace_dlg.notfound'));
            tinyMCEPopup.storeSelection();
        } else {
            if (!w.find(s, ca, b, false, false, false, false))
                wm.alert(ed.getLang('searchreplace_dlg.notfound'));
            else
                fix();
        }
    }
};
tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);
program/js/tiny_mce/plugins/searchreplace/jscripts/searchreplace.js
File was deleted
program/js/tiny_mce/plugins/searchreplace/langs/en.js
File was deleted
program/js/tiny_mce/plugins/searchreplace/langs/en_dlg.js
New file
@@ -0,0 +1,16 @@
tinyMCE.addI18n('en.searchreplace_dlg',{
searchnext_desc:"Find again",
notfound:"The search has been completed. The search string could not be found.",
search_title:"Find",
replace_title:"Find/Replace",
allreplaced:"All occurrences of the search string were replaced.",
findwhat:"Find what",
replacewith:"Replace with",
direction:"Direction",
up:"Up",
down:"Down",
mcase:"Match case",
findnext:"Find next",
replace:"Replace",
replaceall:"Replace all"
});
program/js/tiny_mce/plugins/searchreplace/readme.txt
File was deleted
program/js/tiny_mce/plugins/searchreplace/searchreplace.htm
@@ -1,39 +1,39 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_searchreplace_replace_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/searchreplace.js"></script>
    <title>{#searchreplace_dlg.replace_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="js/searchreplace.js"></script>
    <link rel="stylesheet" type="text/css" href="css/searchreplace.css" />
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none; margin: 4px;">
<form onsubmit="return false;" action="#">
<body style="display:none;">
<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="search_tab"><span><a href="javascript:mcTabs.displayTab('search_tab','search_panel');manageReplaceButtons();" onmousedown="return copyValues(this);">{$lang_searchreplace_search_desc}</a></span></li>
            <li id="replace_tab"><span><a href="javascript:mcTabs.displayTab('replace_tab','replace_panel');manageReplaceButtons();" onmousedown="return copyValues(this);">{$lang_searchreplace_replace}</a></span></li>
            <li id="search_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>
            <li id="replace_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="search_panel" class="panel">
            <table border="0" cellspacing="0" cellpadding="2">
                <tr>
                    <td><label for="search_panel_searchstring">{$lang_searchreplace_findwhat}</label></td>
                    <td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
                    <td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" /></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <table border="0" cellspacing="0" cellpadding="0" class="direction">
                            <tr>
                                <td><label>{$lang_searchreplace_direction}</label></td>
                                <td><label>{#searchreplace_dlg.direction}</label></td>
                                <td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>
                                <td><label for="search_panel_backwardsu">{$lang_searchreplace_up}</label></td>
                                <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" /></td>
                                <td><label for="search_panel_backwardsd">{$lang_searchreplace_down}</label></td>
                                <td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
                                <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>
                                <td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>
                            </tr>
                        </table>
                    </td>
@@ -43,7 +43,7 @@
                        <table border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
                                <td><label for="search_panel_casesensitivebox">{$lang_searchreplace_case}</label></td>
                                <td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
                            </tr>
                        </table>
                    </td>
@@ -54,22 +54,22 @@
        <div id="replace_panel" class="panel">
            <table border="0" cellspacing="0" cellpadding="2">
                <tr>
                    <td><label for="replace_panel_searchstring">{$lang_searchreplace_findwhat}</label></td>
                    <td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>
                    <td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" /></td>
                </tr>
                <tr>
                    <td><label for="replace_panel_replacestring">{$lang_searchreplace_replacewith}</label></td>
                    <td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>
                    <td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" /></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <table border="0" cellspacing="0" cellpadding="0" class="direction">
                            <tr>
                                <td><label>{$lang_searchreplace_direction}</label></td>
                                <td><label>{#searchreplace_dlg.direction}</label></td>
                                <td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>
                                <td><label for="replace_panel_backwardsu">{$lang_searchreplace_up}</label></td>
                                <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" /></td>
                                <td><label for="replace_panel_backwardsd">{$lang_searchreplace_down}</label></td>
                                <td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>
                                <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>
                                <td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>
                            </tr>
                        </table>
                    </td>
@@ -79,7 +79,7 @@
                        <table border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>
                                <td><label for="replace_panel_casesensitivebox">{$lang_searchreplace_case}</label></td>
                                <td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>
                            </tr>
                        </table>
                    </td>
@@ -91,15 +91,13 @@
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_searchreplace_findnext}" onclick="searchNext('none');" />
            <span id="replace_buttons">
                <input type="button" id="replaceBtn" name="replaceBtn" value="{$lang_searchreplace_replace}" onclick="searchNext('current');" />
                <input type="button" id="replaceAllBtn" name="replaceAllBtn" value="{$lang_searchreplace_replaceall}" onclick="searchNext('all');;" />
            </span>
            <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />
            <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />
            <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />
        </div>
        <div style="float: right">    
            <input type="button" id="cancel" name="cancel" value="{$lang_searchreplace_cancel}" onclick="tinyMCEPopup.close();" />
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
program/js/tiny_mce/plugins/spellchecker/changelog
File was deleted
program/js/tiny_mce/plugins/spellchecker/classes/TinyGoogleSpell.class.php
File was deleted
program/js/tiny_mce/plugins/spellchecker/classes/TinyPspell.class.php
File was deleted
program/js/tiny_mce/plugins/spellchecker/classes/TinyPspellShell.class.php
File was deleted
program/js/tiny_mce/plugins/spellchecker/config.php
File was deleted
program/js/tiny_mce/plugins/spellchecker/css/content.css
@@ -1,5 +1 @@
.mceItemHiddenSpellWord {
    background: url('../images/wline.gif') repeat-x bottom left;
    bo2rder-bottom: 1px dashed red;
    cursor: default;
}
.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}
program/js/tiny_mce/plugins/spellchecker/css/spellchecker.css
File was deleted
program/js/tiny_mce/plugins/spellchecker/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('spellchecker','en,fr,sv,nn,nb');var TinyMCE_SpellCheckerPlugin={_contextMenu:new TinyMCE_Menu(),_menu:new TinyMCE_Menu(),_counter:0,_ajaxPage:'/tinyspell.php',getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},handleEvent:function(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var inst=tinyMCE.selectedInstance,args='';var self=TinyMCE_SpellCheckerPlugin;var cm=self._contextMenu;var p,p2,x,y,sx,sy,h,elm;if((e.type=="click"||e.type=="contextmenu")&&elm){do{if(tinyMCE.getAttrib(elm,'class')=="mceItemHiddenSpellWord"){inst.spellCheckerElm=elm;args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=suggest&check='+encodeURIComponent(elm.innerHTML);args+='&lang='+escape(inst.spellCheckerLang);elm=inst.spellCheckerElm;p=tinyMCE.getAbsPosition(inst.iframeElement);p2=tinyMCE.getAbsPosition(elm);h=parseInt(elm.offsetHeight);sx=inst.getBody().scrollLeft;sy=inst.getBody().scrollTop;x=p.absLeft+p2.absLeft-sx;y=p.absTop+p2.absTop-sy+h;cm.clear();cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait','',true));cm.show();cm.moveTo(x,y);inst.selection.selectNode(elm,false,false);self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);tinyMCE.cancelEvent(e);return false;}}while((elm=elm.parentNode));}return true;},initInstance:function(inst){var self=TinyMCE_SpellCheckerPlugin,m=self._menu,cm=self._contextMenu,e;tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/spellchecker/css/content.css");if(!tinyMCE.hasMenu('spellcheckercontextmenu')){tinyMCE.importCSS(document,tinyMCE.baseURL+"/plugins/spellchecker/css/spellchecker.css");cm.init({drop_menu:false});tinyMCE.addMenu('spellcheckercontextmenu',cm);}if(!tinyMCE.hasMenu('spellcheckermenu')){m.init({});tinyMCE.addMenu('spellcheckermenu',m);}inst.spellCheckerLang='en';self._buildSettingsMenu(inst,null);e=self._getBlockBoxLayer(inst).create('div','mceBlockBox',document.getElementById(inst.editorId+'_parent'));self._getMsgBoxLayer(inst).create('div','mceMsgBox',document.getElementById(inst.editorId+'_parent'));},_getMsgBoxLayer:function(inst){if(!inst.spellCheckerMsgBoxL)inst.spellCheckerMsgBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerMsgBox',false);return inst.spellCheckerMsgBoxL;},_getBlockBoxLayer:function(inst){if(!inst.spellCheckerBoxL)inst.spellCheckerBoxL=new TinyMCE_Layer(inst.editorId+'_spellcheckerBlockBox',false);return inst.spellCheckerBoxL;},_buildSettingsMenu:function(inst,lang){var i,ar=tinyMCE.getParam('spellchecker_languages','+English=en').split(','),p;var self=TinyMCE_SpellCheckerPlugin,m=self._menu,c;m.clear();m.addTitle(tinyMCE.getLang('lang_spellchecker_langs','',true));for(i=0;i<ar.length;i++){if(ar[i]!=''){p=ar[i].split('=');c='mceMenuCheckItem';if(p[0].charAt(0)=='+'){p[0]=p[0].substring(1);if(lang==null){c='mceMenuSelectedItem';inst.spellCheckerLang=p[1];}}if(lang==p[1])c='mceMenuSelectedItem';m.add({text:p[0],js:"tinyMCE.execInstanceCommand('"+inst.editorId+"','mceSpellCheckerSetLang',false,'"+p[1]+"');",class_name:c});}}},setupContent:function(editor_id,body,doc){TinyMCE_SpellCheckerPlugin._removeWords(doc);},getControlHTML:function(cn){switch(cn){case"spellchecker":return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn,'lang_spellchecker_desc','{$pluginurl}/images/spellchecker.gif','lang_spellchecker_desc','mceSpellCheckerMenu','mceSpellCheck');}return"";},_getMenuButtonHTML:function(id,lang,img,mlang,mid,cmd,ui,val){var h='',m,x;cmd='tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isMSIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" title="{$'+lang+'}" />';h+='<img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" onclick="'+mcmd+'return false;" />';h+='</a>';}else{if(tinyMCE.isMSIE&&!tinyMCE.isOpera)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\''+mid+'\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>';}return h;},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'');},_toggleMenu:function(editor_id,id){var self=TinyMCE_SpellCheckerPlugin;var e=document.getElementById(editor_id+'_spellchecker');var inst=tinyMCE.getInstanceById(editor_id);if(self._menu.isVisible()){tinyMCE.hideMenus();return;}tinyMCE.lastMenuBtnClass=e.className.replace(/\s.*$/,'');tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonFocus');self._menu.moveRelativeTo(e,'bl');self._menu.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?0:1,-1);if(tinyMCE.isOpera)self._menu.moveBy(0,-2);self._onMenuEvent(inst,self._menu,'show');self._menu.show();tinyMCE.lastSelectedMenuBtn=editor_id+'_spellchecker';},_onMenuEvent:function(inst,m,n){TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst,inst.spellCheckerLang);},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id),self=TinyMCE_SpellCheckerPlugin,args='',co,bb,mb,nl,i,e;switch(command){case"mceSpellCheck":if(!inst.spellcheckerOn){inst.spellCheckerBookmark=inst.selection.getBookmark();args+='id='+inst.editorId+"|"+(++self._counter);args+='&cmd=spell&check='+encodeURIComponent(self._getWordList(inst.getBody())).replace(/\'/g,'%27');args+='&lang='+escape(inst.spellCheckerLang);co=document.getElementById(inst.editorId+'_parent').firstChild;bb=self._getBlockBoxLayer(inst);bb.moveRelativeTo(co,'tl');bb.resizeTo(co.offsetWidth,co.offsetHeight);bb.show();mb=self._getMsgBoxLayer(inst);e=mb.getElement();e.innerHTML='<span>'+tinyMCE.getLang('lang_spellchecker_swait','',true)+'</span>';mb.show();mb.moveRelativeTo(co,'cc');if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=true;}inst.spellcheckerOn=true;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButtonSelected');self._sendAjax(self.baseURL+self._ajaxPage,self._ajaxResponse,'post',args);}else{self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');}return true;case"mceSpellCheckReplace":if(inst.spellCheckerElm)tinyMCE.setOuterHTML(inst.spellCheckerElm,value);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnore":if(inst.spellCheckerElm)self._removeWord(inst.spellCheckerElm);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckIgnoreAll":if(inst.spellCheckerElm)self._removeWords(inst.getDoc(),inst.spellCheckerElm.innerHTML);self._checkDone(inst);self._contextMenu.hide();self._menu.hide();return true;case"mceSpellCheckerSetLang":tinyMCE.hideMenus();inst.spellCheckerLang=value;self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(editor_id+'_spellchecker','mceMenuButton');return true;}return false;},cleanup:function(type,content,inst){switch(type){case"get_from_editor_dom":TinyMCE_SpellCheckerPlugin._removeWords(content);inst.spellcheckerOn=false;break;}return content;},_displayUI:function(inst){var self=TinyMCE_SpellCheckerPlugin;var bb=self._getBlockBoxLayer(inst);var mb=self._getMsgBoxLayer(inst);var nl,i;var co=document.getElementById(inst.editorId+'_parent').firstChild;if(tinyMCE.isMSIE&&!tinyMCE.isOpera){nl=co.getElementsByTagName('select');for(i=0;i<nl.length;i++)nl[i].disabled=false;}bb.hide();mb.hide();},_ajaxResponse:function(xml){var el=xml?xml.documentElement:null;var inst=tinyMCE.selectedInstance,self=TinyMCE_SpellCheckerPlugin;var cmd=el?el.getAttribute("cmd"):null,err,id=el?el.getAttribute("id"):null;if(id)inst=tinyMCE.getInstanceById(id.substring(0,id.indexOf('|')));self._displayUI(inst);if(cmd=="suggest"&&id!=inst.editorId+"|"+self._counter)return;if(!el){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert("Could not execute AJAX call, server didn't return valid a XML.");return;}err=el.getAttribute("error");if(err=="true"){inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');alert(el.getAttribute("msg"));return;}switch(cmd){case"spell":if(xml.documentElement.firstChild){self._markWords(inst.getDoc(),inst.getBody(),decodeURIComponent(el.firstChild.nodeValue).split('+'));inst.selection.moveToBookmark(inst.spellCheckerBookmark);if(tinyMCE.getParam('spellchecker_report_mispellings',false))alert(tinyMCE.getLang('lang_spellchecker_mpell_found','',true,{words:self._countWords(inst)}));}else alert(tinyMCE.getLang('lang_spellchecker_no_mpell','',true));self._checkDone(inst);break;case"suggest":self._buildMenu(el.firstChild?decodeURIComponent(el.firstChild.nodeValue).split('+'):null,10);self._contextMenu.show();break;}},_getWordSeparators:function(){var i,re='',ch=tinyMCE.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}\u201d\u201c');for(i=0;i<ch.length;i++)re+='\\'+ch.charAt(i);return re;},_getWordList:function(n){var i,x,s,nv='',nl=tinyMCE.getNodeTree(n,new Array(),3),wl=new Array();var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<nl.length;i++){if(!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))nv+=nl[i].nodeValue+" ";}nv=nv.replace(new RegExp('([0-9]|['+re+'])','g'),' ');nv=tinyMCE.trim(nv.replace(/(\s+)/g,' '));nl=nv.split(/\s+/);for(i=0;i<nl.length;i++){s=false;for(x=0;x<wl.length;x++){if(wl[x]==nl[i]){s=true;break;}}if(!s&&nl[i].length>0)wl[wl.length]=nl[i];}return wl.join(' ');},_removeWords:function(doc,word){var i,c,nl=doc.getElementsByTagName("span");var self=TinyMCE_SpellCheckerPlugin;var inst=tinyMCE.selectedInstance,b=inst?inst.selection.getBookmark():null;word=typeof(word)=='undefined'?null:word;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if((c=='mceItemHiddenSpellWord'||c=='mceItemHidden')&&(word==null||nl[i].innerHTML==word))self._removeWord(nl[i]);}if(b)inst.selection.moveToBookmark(b);},_checkDone:function(inst){var self=TinyMCE_SpellCheckerPlugin;var w=self._countWords(inst);if(w==0){self._removeWords(inst.getDoc());inst.spellcheckerOn=false;tinyMCE.switchClass(inst.editorId+'_spellchecker','mceMenuButton');}},_countWords:function(inst){var i,w=0,nl=inst.getDoc().getElementsByTagName("span"),c;var self=TinyMCE_SpellCheckerPlugin;for(i=nl.length-1;i>=0;i--){c=tinyMCE.getAttrib(nl[i],'class');if(c=='mceItemHiddenSpellWord')w++;}return w;},_removeWord:function(e){if(e!=null)tinyMCE.setOuterHTML(e,e.innerHTML);},_markWords:function(doc,n,wl){var i,nv,nn,nl=tinyMCE.getNodeTree(n,new Array(),3);var r1,r2,r3,r4,r5,w='';var re=TinyMCE_SpellCheckerPlugin._getWordSeparators();for(i=0;i<wl.length;i++){if(wl[i].length>0)w+=wl[i]+((i==wl.length-1)?'':'|');}for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');if(r1.test(nv)||r2.test(nv)||r3.test(nv)||r4.test(nv)){nv=tinyMCE.xmlEncode(nv);nv=nv.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');nv=nv.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');nn=doc.createElement('span');nn.className="mceItemHidden";nn.innerHTML=nv;nl[i].parentNode.replaceChild(nn,nl[i]);}}},_buildMenu:function(sg,max){var i,self=TinyMCE_SpellCheckerPlugin,cm=self._contextMenu;cm.clear();if(sg!=null){cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug','',true));for(i=0;i<sg.length&&i<max;i++)cm.addItem(sg[i],'tinyMCE.execCommand("mceSpellCheckReplace",false,"'+sg[i]+'");');cm.addSeparator();}else cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug','',true));cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words','',true),'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');cm.update();},_getAjaxHTTP:function(){try{return new ActiveXObject('Msxml2.XMLHTTP')}catch(e){try{return new ActiveXObject('Microsoft.XMLHTTP')}catch(e){return new XMLHttpRequest();}}},_sendAjax:function(u,f,m,a){var x=TinyMCE_SpellCheckerPlugin._getAjaxHTTP();x.open(m,u,true);x.onreadystatechange=function(){if(x.readyState==4)f(x.responseXML);};if(m=='post')x.setRequestHeader('Content-type','application/x-www-form-urlencoded');x.send(a);}};tinyMCE.addPlugin('spellchecker',TinyMCE_SpellCheckerPlugin);
(function(){var JSONRequest=tinymce.util.JSONRequest,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.SpellcheckerPlugin',{getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',version:tinymce.majorVersion+"."+tinymce.minorVersion};},init:function(ed,url){var t=this,cm;t.url=url;t.editor=ed;ed.addCommand('mceSpellCheck',function(){if(!t.active){ed.setProgressState(1);t._sendRPC('checkWords',[t.selectedLang,t._getWords()],function(r){if(r.length>0){t.active=1;t._markWords(r);ed.setProgressState(0);ed.nodeChanged();}else{ed.setProgressState(0);ed.windowManager.alert('spellchecker.no_mpell');}});}else t._done();});ed.onInit.add(function(){if(ed.settings.content_css!==false)ed.dom.loadCSS(url+'/css/content.css');});ed.onClick.add(t._showMenu,t);ed.onContextMenu.add(t._showMenu,t);ed.onBeforeGetContent.add(function(){if(t.active)t._removeWords();});ed.onNodeChange.add(function(ed,cm){cm.setActive('spellchecker',t.active);});ed.onSetContent.add(function(){t._done();});ed.onBeforeGetContent.add(function(){t._done();});ed.onBeforeExecCommand.add(function(ed,cmd){if(cmd=='mceFullScreen')t._done();});t.languages={};each(ed.getParam('spellchecker_languages','+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv','hash'),function(v,k){if(k.indexOf('+')===0){k=k.substring(1);t.selectedLang=v;}t.languages[k]=v;});},createControl:function(n,cm){var t=this,c,ed=t.editor;if(n=='spellchecker'){c=cm.createSplitButton(n,{title:'spellchecker.desc',cmd:'mceSpellCheck',scope:t});c.onRenderMenu.add(function(c,m){m.add({title:'spellchecker.langs','class':'mceMenuItemTitle'}).setDisabled(1);each(t.languages,function(v,k){var o={icon:1},mi;o.onclick=function(){mi.setSelected(1);t.selectedItem.setSelected(0);t.selectedItem=mi;t.selectedLang=v;};o.title=k;mi=m.add(o);mi.setSelected(v==t.selectedLang);if(v==t.selectedLang)t.selectedItem=mi;})});return c;}},_walk:function(n,f){var d=this.editor.getDoc(),w;if(d.createTreeWalker){w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while((n=w.nextNode())!=null)f.call(this,n);}else tinymce.walk(n,f,'childNodes');},_getSeparators:function(){var re='',i,str=this.editor.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c');for(i=0;i<str.length;i++)re+='\\'+str.charAt(i);return re;},_getWords:function(){var ed=this.editor,wl=[],tx='',lo={};this._walk(ed.getBody(),function(n){if(n.nodeType==3)tx+=n.nodeValue+' ';});tx=tx.replace(new RegExp('([0-9]|['+this._getSeparators()+'])','g'),' ');tx=tinymce.trim(tx.replace(/(\s+)/g,' '));each(tx.split(' '),function(v){if(!lo[v]){wl.push(v);lo[v]=1;}});return wl;},_removeWords:function(w){var ed=this.editor,dom=ed.dom,se=ed.selection,b=se.getBookmark();each(dom.select('span').reverse(),function(n){if(n&&(dom.hasClass(n,'mceItemHiddenSpellWord')||dom.hasClass(n,'mceItemHidden'))){if(!w||dom.decode(n.innerHTML)==w)dom.remove(n,1);}});se.moveToBookmark(b);},_markWords:function(wl){var r1,r2,r3,r4,r5,w='',ed=this.editor,re=this._getSeparators(),dom=ed.dom,nl=[];var se=ed.selection,b=se.getBookmark();each(wl,function(v){w+=(w?'|':'')+v;});r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');this._walk(this.editor.getBody(),function(n){if(n.nodeType==3){nl.push(n);}});each(nl,function(n){var v;if(n.nodeType==3){v=n.nodeValue;if(r1.test(v)||r2.test(v)||r3.test(v)||r4.test(v)){v=dom.encode(v);v=v.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');v=v.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');dom.replace(dom.create('span',{'class':'mceItemHidden'},v),n);}}});se.moveToBookmark(b);},_showMenu:function(ed,e){var t=this,ed=t.editor,m=t._menu,p1,dom=ed.dom,vp=dom.getViewPort(ed.getWin());if(!m){p1=DOM.getPos(ed.getContentAreaContainer());m=ed.controlManager.createDropMenu('spellcheckermenu',{offset_x:p1.x,offset_y:p1.y,'class':'mceNoIcons'});t._menu=m;}if(dom.hasClass(e.target,'mceItemHiddenSpellWord')){m.removeAll();m.add({title:'spellchecker.wait','class':'mceMenuItemTitle'}).setDisabled(1);t._sendRPC('getSuggestions',[t.selectedLang,dom.decode(e.target.innerHTML)],function(r){m.removeAll();if(r.length>0){m.add({title:'spellchecker.sug','class':'mceMenuItemTitle'}).setDisabled(1);each(r,function(v){m.add({title:v,onclick:function(){dom.replace(ed.getDoc().createTextNode(v),e.target);t._checkDone();}});});m.addSeparator();}else m.add({title:'spellchecker.no_sug','class':'mceMenuItemTitle'}).setDisabled(1);m.add({title:'spellchecker.ignore_word',onclick:function(){dom.remove(e.target,1);t._checkDone();}});m.add({title:'spellchecker.ignore_words',onclick:function(){t._removeWords(dom.decode(e.target.innerHTML));t._checkDone();}});m.update();});ed.selection.select(e.target);p1=dom.getPos(e.target);m.showMenu(p1.x,p1.y+e.target.offsetHeight-vp.y);return tinymce.dom.Event.cancel(e);}else m.hideMenu();},_checkDone:function(){var t=this,ed=t.editor,dom=ed.dom,o;each(dom.select('span'),function(n){if(n&&dom.hasClass(n,'mceItemHiddenSpellWord')){o=true;return false;}});if(!o)t._done();},_done:function(){var t=this,la=t.active;if(t.active){t.active=0;t._removeWords();if(t._menu)t._menu.hideMenu();if(la)t.editor.nodeChanged();}},_sendRPC:function(m,p,cb){var t=this,url=t.editor.getParam("spellchecker_rpc_url","{backend}");if(url=='{backend}'){t.editor.setProgressState(0);alert('Please specify: spellchecker_rpc_url');return;}JSONRequest.sendRPC({url:url,method:m,params:p,success:cb,error:function(e,x){t.editor.setProgressState(0);t.editor.windowManager.alert(e.errstr||('Error response: '+x.responseText));}});}});tinymce.PluginManager.add('spellchecker',tinymce.plugins.SpellcheckerPlugin);})();
program/js/tiny_mce/plugins/spellchecker/editor_plugin_src.js
@@ -1,588 +1,338 @@
/**
 * $Id: editor_plugin_src.js 28 2006-08-01 16:02:56Z spocke $
 * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
tinyMCE.importPluginLanguagePack('spellchecker', 'en,fr,sv,nn,nb');
(function() {
    var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;
// Plucin static class
var TinyMCE_SpellCheckerPlugin = {
    _contextMenu : new TinyMCE_Menu(),
    _menu : new TinyMCE_Menu(),
    _counter : 0,
    _ajaxPage : '/tinyspell.php',
    tinymce.create('tinymce.plugins.SpellcheckerPlugin', {
    getInfo : function() {
        return {
            longname : 'Spellchecker',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_spellchecker.html',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
        };
    },
    handleEvent : function(e) {
        var elm = tinyMCE.isMSIE ? e.srcElement : e.target;
        var inst = tinyMCE.selectedInstance, args = '';
        var self = TinyMCE_SpellCheckerPlugin;
        var cm = self._contextMenu;
        var p, p2, x, y, sx, sy, h, elm;
        init : function(ed, url) {
            var t = this, cm;
        // Handle click on word
        if ((e.type == "click" || e.type == "contextmenu") && elm) {
            do {
                if (tinyMCE.getAttrib(elm, 'class') == "mceItemHiddenSpellWord") {
                    inst.spellCheckerElm = elm;
            t.url = url;
            t.editor = ed;
                    // Setup arguments
                    args += 'id=' + inst.editorId + "|" + (++self._counter);
                    args += '&cmd=suggest&check=' + encodeURIComponent(elm.innerHTML);
                    args += '&lang=' + escape(inst.spellCheckerLang);
                    elm = inst.spellCheckerElm;
                    p = tinyMCE.getAbsPosition(inst.iframeElement);
                    p2 = tinyMCE.getAbsPosition(elm);
                    h = parseInt(elm.offsetHeight);
                    sx = inst.getBody().scrollLeft;
                    sy = inst.getBody().scrollTop;
                    x = p.absLeft + p2.absLeft - sx;
                    y = p.absTop + p2.absTop - sy + h;
                    cm.clear();
                    cm.addTitle(tinyMCE.getLang('lang_spellchecker_wait', '', true));
                    cm.show();
                    cm.moveTo(x, y);
                    inst.selection.selectNode(elm, false, false);
                    self._sendAjax(self.baseURL + self._ajaxPage, self._ajaxResponse, 'post', args);
                    tinyMCE.cancelEvent(e);
                    return false;
                }
            } while ((elm = elm.parentNode));
        }
        return true;
    },
    initInstance : function(inst) {
        var self = TinyMCE_SpellCheckerPlugin, m = self._menu, cm = self._contextMenu, e;
        tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/spellchecker/css/content.css");
        if (!tinyMCE.hasMenu('spellcheckercontextmenu')) {
            tinyMCE.importCSS(document, tinyMCE.baseURL + "/plugins/spellchecker/css/spellchecker.css");
            cm.init({drop_menu : false});
            tinyMCE.addMenu('spellcheckercontextmenu', cm);
        }
        if (!tinyMCE.hasMenu('spellcheckermenu')) {
            m.init({});
            tinyMCE.addMenu('spellcheckermenu', m);
        }
        inst.spellCheckerLang = 'en';
        self._buildSettingsMenu(inst, null);
        e = self._getBlockBoxLayer(inst).create('div', 'mceBlockBox', document.getElementById(inst.editorId + '_parent'));
        self._getMsgBoxLayer(inst).create('div', 'mceMsgBox', document.getElementById(inst.editorId + '_parent'));
    },
    _getMsgBoxLayer : function(inst) {
        if (!inst.spellCheckerMsgBoxL)
            inst.spellCheckerMsgBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerMsgBox', false);
        return inst.spellCheckerMsgBoxL;
    },
    _getBlockBoxLayer : function(inst) {
        if (!inst.spellCheckerBoxL)
            inst.spellCheckerBoxL = new TinyMCE_Layer(inst.editorId + '_spellcheckerBlockBox', false);
        return inst.spellCheckerBoxL;
    },
    _buildSettingsMenu : function(inst, lang) {
        var i, ar = tinyMCE.getParam('spellchecker_languages', '+English=en').split(','), p;
        var self = TinyMCE_SpellCheckerPlugin, m = self._menu, c;
        m.clear();
        m.addTitle(tinyMCE.getLang('lang_spellchecker_langs', '', true));
        for (i=0; i<ar.length; i++) {
            if (ar[i] != '') {
                p = ar[i].split('=');
                c = 'mceMenuCheckItem';
                if (p[0].charAt(0) == '+') {
                    p[0] = p[0].substring(1);
                    if (lang == null) {
                        c = 'mceMenuSelectedItem';
                        inst.spellCheckerLang = p[1];
                    }
                }
                if (lang == p[1])
                    c = 'mceMenuSelectedItem';
                m.add({text : p[0], js : "tinyMCE.execInstanceCommand('" + inst.editorId + "','mceSpellCheckerSetLang',false,'" + p[1] + "');", class_name : c});
            }
        }
    },
    setupContent : function(editor_id, body, doc) {
        TinyMCE_SpellCheckerPlugin._removeWords(doc);
    },
    getControlHTML : function(cn) {
        switch (cn) {
            case "spellchecker":
                return TinyMCE_SpellCheckerPlugin._getMenuButtonHTML(cn, 'lang_spellchecker_desc', '{$pluginurl}/images/spellchecker.gif', 'lang_spellchecker_desc', 'mceSpellCheckerMenu', 'mceSpellCheck');
        }
        return "";
    },
    /**
     * Returns the HTML code for a normal button control.
     *
     * @param {string} id Button control id, this will be the suffix for the element id, the prefix is the editor id.
     * @param {string} lang Language variable key name to insert as the title/alt of the button image.
     * @param {string} img Image URL to insert, {$themeurl} and {$pluginurl} will be replaced.
     * @param {string} mlang Language variable key name to insert as the title/alt of the menu button image.
     * @param {string} mid Menu by id to display when the menu button is pressed.
     * @param {string} cmd Command to execute when the user clicks the button.
     * @param {string} ui Optional user interface boolean for command.
     * @param {string} val Optional value for command.
     * @return HTML code for a normal button based in input information.
     * @type string
     */
    _getMenuButtonHTML : function(id, lang, img, mlang, mid, cmd, ui, val) {
        var h = '', m, x;
        cmd = 'tinyMCE.hideMenus();tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
        if (typeof(ui) != "undefined" && ui != null)
            cmd += ',' + ui;
        if (typeof(val) != "undefined" && val != null)
            cmd += ",'" + val + "'";
        cmd += ');';
        // Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
        if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = tinyMCE.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
            // Tiled button
            x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
            h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';
            h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" title="{$' + lang + '}" />';
            h += '<img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" onclick="' + mcmd + 'return false;" />';
            h += '</a>';
            // Register commands
            ed.addCommand('mceSpellCheck', function() {
                if (!t.active) {
                    ed.setProgressState(1);
                    t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {
                        if (r.length > 0) {
                            t.active = 1;
                            t._markWords(r);
                            ed.setProgressState(0);
                            ed.nodeChanged();
        } else {
            if (tinyMCE.isMSIE && !tinyMCE.isOpera)
                h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE.plugins.spellchecker._menuButtonEvent(\'over\',this);" onmouseout="tinyMCE.plugins.spellchecker._menuButtonEvent(\'out\',this);">';
            else
                h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
            h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
            h += '<img src="' + img + '" title="{$' + lang + '}" /></a>';
            h += '<a href="#" onclick="tinyMCE.plugins.spellchecker._toggleMenu(\'{$editor_id}\',\'' + mid + '\');return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$' + lang + '}" class="mceMenuButton" />';
            h += '</a></span>';
                            ed.setProgressState(0);
                            ed.windowManager.alert('spellchecker.no_mpell');
        }
        return h;
    },
    _menuButtonEvent : function(e, o) {
        if (o.className == 'mceMenuButtonFocus')
            return;
        if (e == 'over')
            o.className = o.className + ' mceMenuHover';
        else
            o.className = o.className.replace(/\s.*$/, '');
    },
    _toggleMenu : function(editor_id, id) {
        var self = TinyMCE_SpellCheckerPlugin;
        var e = document.getElementById(editor_id + '_spellchecker');
        var inst = tinyMCE.getInstanceById(editor_id);
        if (self._menu.isVisible()) {
            tinyMCE.hideMenus();
            return;
        }
        tinyMCE.lastMenuBtnClass = e.className.replace(/\s.*$/, '');
        tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonFocus');
        self._menu.moveRelativeTo(e, 'bl');
        self._menu.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? 0 : 1, -1);
        if (tinyMCE.isOpera)
            self._menu.moveBy(0, -2);
        self._onMenuEvent(inst, self._menu, 'show');
        self._menu.show();
        tinyMCE.lastSelectedMenuBtn = editor_id + '_spellchecker';
    },
    _onMenuEvent : function(inst, m, n) {
        TinyMCE_SpellCheckerPlugin._buildSettingsMenu(inst, inst.spellCheckerLang);
    },
    execCommand : function(editor_id, element, command, user_interface, value) {
        var inst = tinyMCE.getInstanceById(editor_id), self = TinyMCE_SpellCheckerPlugin, args = '', co, bb, mb, nl, i, e;
        // Handle commands
        switch (command) {
            case "mceSpellCheck":
                if (!inst.spellcheckerOn) {
                    inst.spellCheckerBookmark = inst.selection.getBookmark();
                    // Setup arguments
                    args += 'id=' + inst.editorId + "|" + (++self._counter);
                    args += '&cmd=spell&check=' + encodeURIComponent(self._getWordList(inst.getBody())).replace( /\'/g, '%27' );
                    args += '&lang=' + escape(inst.spellCheckerLang);
                    co = document.getElementById(inst.editorId + '_parent').firstChild;
                    bb = self._getBlockBoxLayer(inst);
                    bb.moveRelativeTo(co, 'tl');
                    bb.resizeTo(co.offsetWidth, co.offsetHeight);
                    bb.show();
                    // Setup message box
                    mb = self._getMsgBoxLayer(inst);
                    e = mb.getElement();
                    e.innerHTML = '<span>' + tinyMCE.getLang('lang_spellchecker_swait', '', true) + '</span>';
                    mb.show();
                    mb.moveRelativeTo(co, 'cc');
                    if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
                        nl = co.getElementsByTagName('select');
                        for (i=0; i<nl.length; i++)
                            nl[i].disabled = true;
                    }
                    inst.spellcheckerOn = true;
                    tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButtonSelected');
                    self._sendAjax(self.baseURL + self._ajaxPage, self._ajaxResponse, 'post', args);
                } else {
                    self._removeWords(inst.getDoc());
                    inst.spellcheckerOn = false;
                    tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');
                }
                return true;
            case "mceSpellCheckReplace":
                if (inst.spellCheckerElm)
                    tinyMCE.setOuterHTML(inst.spellCheckerElm, value);
                self._checkDone(inst);
                self._contextMenu.hide();
                self._menu.hide();
                return true;
            case "mceSpellCheckIgnore":
                if (inst.spellCheckerElm)
                    self._removeWord(inst.spellCheckerElm);
                self._checkDone(inst);
                self._contextMenu.hide();
                self._menu.hide();
                return true;
            case "mceSpellCheckIgnoreAll":
                if (inst.spellCheckerElm)
                    self._removeWords(inst.getDoc(), inst.spellCheckerElm.innerHTML);
                self._checkDone(inst);
                self._contextMenu.hide();
                self._menu.hide();
                return true;
            case "mceSpellCheckerSetLang":
                tinyMCE.hideMenus();
                inst.spellCheckerLang = value;
                self._removeWords(inst.getDoc());
                inst.spellcheckerOn = false;
                tinyMCE.switchClass(editor_id + '_spellchecker', 'mceMenuButton');
                return true;
        }
        // Pass to next handler in chain
        return false;
    },
    cleanup : function(type, content, inst) {
        switch (type) {
            case "get_from_editor_dom":
                TinyMCE_SpellCheckerPlugin._removeWords(content);
                inst.spellcheckerOn = false;
                break;
        }
        return content;
    },
    // Private plugin specific methods
    _displayUI : function(inst) {
        var self = TinyMCE_SpellCheckerPlugin;
        var bb = self._getBlockBoxLayer(inst);
        var mb = self._getMsgBoxLayer(inst);
        var nl, i;
        var co = document.getElementById(inst.editorId + '_parent').firstChild;
        if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
            nl = co.getElementsByTagName('select');
            for (i=0; i<nl.length; i++)
                nl[i].disabled = false;
        }
        bb.hide();
        mb.hide();
    },
    _ajaxResponse : function(xml) {
        var el = xml ? xml.documentElement : null;
        var inst = tinyMCE.selectedInstance, self = TinyMCE_SpellCheckerPlugin;
        var cmd = el ? el.getAttribute("cmd") : null, err, id = el ? el.getAttribute("id") : null;
        if (id)
            inst = tinyMCE.getInstanceById(id.substring(0, id.indexOf('|')));
        self._displayUI(inst);
        // Ignore suggestions for other ajax responses
        if (cmd == "suggest" && id != inst.editorId + "|" + self._counter)
            return;
        if (!el) {
            inst.spellcheckerOn = false;
            tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
            alert("Could not execute AJAX call, server didn't return valid a XML.");
            return;
        }
        err = el.getAttribute("error");
        if (err == "true") {
            inst.spellcheckerOn = false;
            tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
            alert(el.getAttribute("msg"));
            return;
        }
        switch (cmd) {
            case "spell":
                if (xml.documentElement.firstChild) {
                    self._markWords(inst.getDoc(), inst.getBody(), decodeURIComponent(el.firstChild.nodeValue).split('+'));
                    inst.selection.moveToBookmark(inst.spellCheckerBookmark);
                    if(tinyMCE.getParam('spellchecker_report_mispellings', false))
                        alert(tinyMCE.getLang('lang_spellchecker_mpell_found', '', true, {words : self._countWords(inst)}));
                    });
                } else
                    alert(tinyMCE.getLang('lang_spellchecker_no_mpell', '', true));
                    t._done();
            });
                self._checkDone(inst);
            ed.onInit.add(function() {
                if (ed.settings.content_css !== false)
                    ed.dom.loadCSS(url + '/css/content.css');
            });
                break;
            ed.onClick.add(t._showMenu, t);
            ed.onContextMenu.add(t._showMenu, t);
            ed.onBeforeGetContent.add(function() {
                if (t.active)
                    t._removeWords();
            });
            case "suggest":
                self._buildMenu(el.firstChild ? decodeURIComponent(el.firstChild.nodeValue).split('+') : null, 10);
                self._contextMenu.show();
                break;
            ed.onNodeChange.add(function(ed, cm) {
                cm.setActive('spellchecker', t.active);
            });
            ed.onSetContent.add(function() {
                t._done();
            });
            ed.onBeforeGetContent.add(function() {
                t._done();
            });
            ed.onBeforeExecCommand.add(function(ed, cmd) {
                if (cmd == 'mceFullScreen')
                    t._done();
            });
            // Find selected language
            t.languages = {};
            each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {
                if (k.indexOf('+') === 0) {
                    k = k.substring(1);
                    t.selectedLang = v;
                }
                t.languages[k] = v;
            });
        },
        createControl : function(n, cm) {
            var t = this, c, ed = t.editor;
            if (n == 'spellchecker') {
                c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});
                c.onRenderMenu.add(function(c, m) {
                    m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
                    each(t.languages, function(v, k) {
                        var o = {icon : 1}, mi;
                        o.onclick = function() {
                            mi.setSelected(1);
                            t.selectedItem.setSelected(0);
                            t.selectedItem = mi;
                            t.selectedLang = v;
                        };
                        o.title = k;
                        mi = m.add(o);
                        mi.setSelected(v == t.selectedLang);
                        if (v == t.selectedLang)
                            t.selectedItem = mi;
                    })
                });
                return c;
        }
    },
    _getWordSeparators : function() {
        var i, re = '', ch = tinyMCE.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
        // Internal functions
        for (i=0; i<ch.length; i++)
            re += '\\' + ch.charAt(i);
        _walk : function(n, f) {
            var d = this.editor.getDoc(), w;
            if (d.createTreeWalker) {
                w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
                while ((n = w.nextNode()) != null)
                    f.call(this, n);
            } else
                tinymce.walk(n, f, 'childNodes');
        },
        _getSeparators : function() {
            var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
            // Build word separator regexp
            for (i=0; i<str.length; i++)
                re += '\\' + str.charAt(i);
        return re;
    },
    _getWordList : function(n) {
        var i, x, s, nv = '', nl = tinyMCE.getNodeTree(n, new Array(), 3), wl = new Array();
        var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();
        _getWords : function() {
            var ed = this.editor, wl = [], tx = '', lo = {};
        for (i=0; i<nl.length; i++) {
            if (!new RegExp('/SCRIPT|STYLE/').test(nl[i].parentNode.nodeName))
                nv += nl[i].nodeValue + " ";
            // Get area text
            this._walk(ed.getBody(), function(n) {
                if (n.nodeType == 3)
                    tx += n.nodeValue + ' ';
            });
            // Split words by separator
            tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');
            tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));
            // Build word array and remove duplicates
            each(tx.split(' '), function(v) {
                if (!lo[v]) {
                    wl.push(v);
                    lo[v] = 1;
        }
            });
        nv = nv.replace(new RegExp('([0-9]|[' + re + '])', 'g'), ' ');
        nv = tinyMCE.trim(nv.replace(/(\s+)/g, ' '));
        nl = nv.split(/\s+/);
        for (i=0; i<nl.length; i++) {
            s = false;
            for (x=0; x<wl.length; x++) {
                if (wl[x] == nl[i]) {
                    s = true;
                    break;
                }
            }
            if (!s && nl[i].length > 0)
                wl[wl.length] = nl[i];
        }
        return wl.join(' ');
            return wl;
    },
    _removeWords : function(doc, word) {
        var i, c, nl = doc.getElementsByTagName("span");
        var self = TinyMCE_SpellCheckerPlugin;
        var inst = tinyMCE.selectedInstance, b = inst ? inst.selection.getBookmark() : null;
        _removeWords : function(w) {
            var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();
        word = typeof(word) == 'undefined' ? null : word;
        for (i=nl.length-1; i>=0; i--) {
            c = tinyMCE.getAttrib(nl[i], 'class');
            if ((c == 'mceItemHiddenSpellWord' || c == 'mceItemHidden') && (word == null || nl[i].innerHTML == word))
                self._removeWord(nl[i]);
            each(dom.select('span').reverse(), function(n) {
                if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {
                    if (!w || dom.decode(n.innerHTML) == w)
                        dom.remove(n, 1);
        }
            });
        if (b)
            inst.selection.moveToBookmark(b);
            se.moveToBookmark(b);
    },
    _checkDone : function(inst) {
        var self = TinyMCE_SpellCheckerPlugin;
        var w = self._countWords(inst);
        _markWords : function(wl) {
            var r1, r2, r3, r4, r5, w = '', ed = this.editor, re = this._getSeparators(), dom = ed.dom, nl = [];
            var se = ed.selection, b = se.getBookmark();
        if (w == 0) {
            self._removeWords(inst.getDoc());
            inst.spellcheckerOn = false;
            tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
        }
    },
            each(wl, function(v) {
                w += (w ? '|' : '') + v;
            });
    _countWords : function(inst) {
        var i, w = 0, nl = inst.getDoc().getElementsByTagName("span"), c;
        var self = TinyMCE_SpellCheckerPlugin;
        for (i=nl.length-1; i>=0; i--) {
            c = tinyMCE.getAttrib(nl[i], 'class');
            if (c == 'mceItemHiddenSpellWord')
                w++;
        }
        return w;
    },
    _removeWord : function(e) {
        if (e != null)
            tinyMCE.setOuterHTML(e, e.innerHTML);
    },
    _markWords : function(doc, n, wl) {
        var i, nv, nn, nl = tinyMCE.getNodeTree(n, new Array(), 3);
        var r1, r2, r3, r4, r5, w = '';
        var re = TinyMCE_SpellCheckerPlugin._getWordSeparators();
        for (i=0; i<wl.length; i++) {
            if (wl[i].length > 0)
                w += wl[i] + ((i == wl.length-1) ? '' : '|');
        }
        for (i=0; i<nl.length; i++) {
            nv = nl[i].nodeValue;
            r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');
            r2 = new RegExp('^(' + w + ')', 'g');
            r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');
            r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');
            r5 = new RegExp('(' + w + ')([' + re + '])', 'g');
            if (r1.test(nv) || r2.test(nv) || r3.test(nv) || r4.test(nv)) {
                nv = tinyMCE.xmlEncode(nv);
                nv = nv.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');
                nv = nv.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');
            // Collect all text nodes
            this._walk(this.editor.getBody(), function(n) {
                if (n.nodeType == 3) {
                    nl.push(n);
                }
            });
                nn = doc.createElement('span');
                nn.className = "mceItemHidden";
                nn.innerHTML = nv;
            // Wrap incorrect words in spans
            each(nl, function(n) {
                var v;
                // Remove old text node
                nl[i].parentNode.replaceChild(nn, nl[i]);
                if (n.nodeType == 3) {
                    v = n.nodeValue;
                    if (r1.test(v) || r2.test(v) || r3.test(v) || r4.test(v)) {
                        v = dom.encode(v);
                        v = v.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');
                        v = v.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');
                        dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n);
            }
        }
            });
            se.moveToBookmark(b);
    },
    _buildMenu : function(sg, max) {
        var i, self = TinyMCE_SpellCheckerPlugin, cm = self._contextMenu;
        _showMenu : function(ed, e) {
            var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin());
        cm.clear();
            if (!m) {
                p1 = DOM.getPos(ed.getContentAreaContainer());
                //p2 = DOM.getPos(ed.getContainer());
        if (sg != null) {
            cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug', '', true));
                m = ed.controlManager.createDropMenu('spellcheckermenu', {
                    offset_x : p1.x,
                    offset_y : p1.y,
                    'class' : 'mceNoIcons'
                });
            for (i=0; i<sg.length && i<max; i++)
                cm.addItem(sg[i], 'tinyMCE.execCommand("mceSpellCheckReplace",false,"' + sg[i] + '");');
                t._menu = m;
            }
            cm.addSeparator();
            if (dom.hasClass(e.target, 'mceItemHiddenSpellWord')) {
                m.removeAll();
                m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
                t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(e.target.innerHTML)], function(r) {
                    m.removeAll();
                    if (r.length > 0) {
                        m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
                        each(r, function(v) {
                            m.add({title : v, onclick : function() {
                                dom.replace(ed.getDoc().createTextNode(v), e.target);
                                t._checkDone();
                            }});
                        });
                        m.addSeparator();
        } else
            cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug', '', true));
                        m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
        cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_word', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnore\');');
        cm.addItem(tinyMCE.getLang('lang_spellchecker_ignore_words', '', true), 'tinyMCE.execCommand(\'mceSpellCheckIgnoreAll\');');
                    m.add({
                        title : 'spellchecker.ignore_word',
                        onclick : function() {
                            dom.remove(e.target, 1);
                            t._checkDone();
                        }
                    });
        cm.update();
                    m.add({
                        title : 'spellchecker.ignore_words',
                        onclick : function() {
                            t._removeWords(dom.decode(e.target.innerHTML));
                            t._checkDone();
                        }
                    });
                    m.update();
                });
                ed.selection.select(e.target);
                p1 = dom.getPos(e.target);
                m.showMenu(p1.x, p1.y + e.target.offsetHeight - vp.y);
                return tinymce.dom.Event.cancel(e);
            } else
                m.hideMenu();
    },
    _getAjaxHTTP : function() {
        try {
            return new ActiveXObject('Msxml2.XMLHTTP')
        } catch (e) {
            try {
                return new ActiveXObject('Microsoft.XMLHTTP')
            } catch (e) {
                return new XMLHttpRequest();
        _checkDone : function() {
            var t = this, ed = t.editor, dom = ed.dom, o;
            each(dom.select('span'), function(n) {
                if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {
                    o = true;
                    return false;
            }
            });
            if (!o)
                t._done();
        },
        _done : function() {
            var t = this, la = t.active;
            if (t.active) {
                t.active = 0;
                t._removeWords();
                if (t._menu)
                    t._menu.hideMenu();
                if (la)
                    t.editor.nodeChanged();
        }
    },
    /**
     * Perform AJAX call.
     *
     * @param {string} u URL of AJAX service.
     * @param {function} f Function to call when response arrives.
     * @param {string} m Request method post or get.
     * @param {Array} a Array with arguments to send.
     */
    _sendAjax : function(u, f, m, a) {
        var x = TinyMCE_SpellCheckerPlugin._getAjaxHTTP();
        _sendRPC : function(m, p, cb) {
            var t = this, url = t.editor.getParam("spellchecker_rpc_url", "{backend}");
        x.open(m, u, true);
        x.onreadystatechange = function() {
            if (x.readyState == 4)
                f(x.responseXML);
        };
        if (m == 'post')
            x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
        x.send(a);
            if (url == '{backend}') {
                t.editor.setProgressState(0);
                alert('Please specify: spellchecker_rpc_url');
                return;
    }
};
            JSONRequest.sendRPC({
                url : url,
                method : m,
                params : p,
                success : cb,
                error : function(e, x) {
                    t.editor.setProgressState(0);
                    t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));
                }
            });
        }
    });
// Register plugin
tinyMCE.addPlugin('spellchecker', TinyMCE_SpellCheckerPlugin);
    tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);
})();
program/js/tiny_mce/plugins/spellchecker/images/spellchecker.gif
Binary files differ
program/js/tiny_mce/plugins/spellchecker/img/wline.gif

program/js/tiny_mce/plugins/spellchecker/langs/en.js
File was deleted
program/js/tiny_mce/plugins/spellchecker/tinyspell.php
File was deleted
program/js/tiny_mce/plugins/table/cell.htm
@@ -1,85 +1,87 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_table_cell_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/cell.js"></script>
    <title>{#table_dlg.cell_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/cell.js"></script>
    <link href="css/cell.css" rel="stylesheet" type="text/css" />
    <base target="_self" />
</head>
<body id="tablecell" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body id="tablecell" style="display: none">
    <form onsubmit="updateAction();return false;" action="#">
        <div class="tabs">
            <ul>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
            </ul>
        </div>
        <div class="panel_wrapper">
            <div id="general_panel" class="panel current">
                <fieldset>
                    <legend>{$lang_table_general_props}</legend>
                    <legend>{#table_dlg.general_props}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
                            <td><label for="align">{$lang_table_align}</label></td>
                            <td><label for="align">{#table_dlg.align}</label></td>
                            <td>
                                <select id="align" name="align">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="center">{$lang_table_align_middle}</option>
                                    <option value="left">{$lang_table_align_left}</option>
                                    <option value="right">{$lang_table_align_right}</option>
                                <select id="align" name="align" class="mceFocus">
                                    <option value="">{#not_set}</option>
                                    <option value="center">{#table_dlg.align_middle}</option>
                                    <option value="left">{#table_dlg.align_left}</option>
                                    <option value="right">{#table_dlg.align_right}</option>
                                </select>
                            </td>
        
                            <td><label for="celltype">{$lang_table_cell_type}</label></td>
                            <td><label for="celltype">{#table_dlg.cell_type}</label></td>
                            <td>
                                <select id="celltype" name="celltype">
                                    <option value="td">{$lang_table_td}</option>
                                    <option value="th">{$lang_table_th}</option>
                                    <option value="td">{#table_dlg.td}</option>
                                    <option value="th">{#table_dlg.th}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="valign">{$lang_table_valign}</label></td>
                            <td><label for="valign">{#table_dlg.valign}</label></td>
                            <td>
                                <select id="valign" name="valign">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="top">{$lang_table_align_top}</option>
                                    <option value="middle">{$lang_table_align_middle}</option>
                                    <option value="bottom">{$lang_table_align_bottom}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="top">{#table_dlg.align_top}</option>
                                    <option value="middle">{#table_dlg.align_middle}</option>
                                    <option value="bottom">{#table_dlg.align_bottom}</option>
                                </select>
                            </td>
                            <td><label for="scope">{$lang_table_scope}</label></td>
                            <td><label for="scope">{#table_dlg.scope}</label></td>
                            <td>
                                <select id="scope" name="scope">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="col">{$lang_table_col}</option>
                                    <option value="row">{$lang_table_row}</option>
                                    <option value="rowgroup">{$lang_table_rowgroup}</option>
                                    <option value="colgroup">{$lang_table_colgroup}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="col">{#table.col}</option>
                                    <option value="row">{#table.row}</option>
                                    <option value="rowgroup">{#table_dlg.rowgroup}</option>
                                    <option value="colgroup">{#table_dlg.colgroup}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="width">{$lang_table_width}</label></td>
                            <td><label for="width">{#table_dlg.width}</label></td>
                            <td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
                            <td><label for="height">{$lang_table_height}</label></td>
                            <td><label for="height">{#table_dlg.height}</label></td>
                            <td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
                        </tr>
                        <tr id="styleSelectRow">
                            <td><label for="class">{$lang_class_name}</label></td>
                            <td><label for="class">{#class_name}</label></td>
                            <td colspan="3">
                                <select id="class" name="class">
                                    <option value="" selected="selected">{$lang_not_set}</option>
                                <select id="class" name="class" class="mceEditableSelect">
                                    <option value="" selected="selected">{#not_set}</option>
                                </select>
                            </td>
                        </tr>
@@ -89,39 +91,39 @@
            <div id="advanced_panel" class="panel">
                <fieldset>
                    <legend>{$lang_table_advanced_props}</legend>
                    <legend>{#table_dlg.advanced_props}</legend>
                    <table border="0" cellpadding="0" cellspacing="4">
                        <tr>
                            <td class="column1"><label for="id">{$lang_table_id}</label></td>
                            <td class="column1"><label for="id">{#table_dlg.id}</label></td>
                            <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> 
                        </tr>
                        <tr>
                            <td><label for="style">{$lang_table_style}</label></td>
                            <td><label for="style">{#table_dlg.style}</label></td>
                            <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
                        </tr>
                        <tr>
                            <td class="column1"><label for="dir">{$lang_table_langdir}</label></td>
                            <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
                            <td>
                                <select id="dir" name="dir" style="width: 200px"> 
                                        <option value="">{$lang_not_set}</option>
                                        <option value="ltr">{$lang_table_ltr}</option>
                                        <option value="rtl">{$lang_table_rtl}</option>
                                        <option value="">{#not_set}</option>
                                        <option value="ltr">{#table_dlg.ltr}</option>
                                        <option value="rtl">{#table_dlg.rtl}</option>
                                </select>
                            </td> 
                        </tr>
                        <tr>
                            <td class="column1"><label for="lang">{$lang_table_langcode}</label></td>
                            <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
                            <td>
                                <input id="lang" name="lang" type="text" value="" style="width: 200px" />
                            </td> 
                        </tr>
                        <tr>
                            <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td>
                            <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -133,7 +135,7 @@
                        </tr>
                        <tr>
                            <td class="column1"><label for="bordercolor">{$lang_table_bordercolor}</label></td>
                            <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -145,7 +147,7 @@
                        </tr>
                        <tr>
                            <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td>
                            <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -163,18 +165,18 @@
        <div class="mceActionPanel">
            <div>
                <select id="action" name="action">
                    <option value="cell">{$lang_table_cell_cell}</option>
                    <option value="row">{$lang_table_cell_row}</option>
                    <option value="all">{$lang_table_cell_all}</option>
                    <option value="cell">{#table_dlg.cell_cell}</option>
                    <option value="row">{#table_dlg.cell_row}</option>
                    <option value="all">{#table_dlg.cell_all}</option>
                </select>
            </div>
            <div style="float: left">
                <div><input type="button" id="insert" name="insert" value="{$lang_update}" onclick="updateAction();" /></div>
                <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
            </div>
            <div style="float: right">
                <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
                <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
            </div>
        </div>
    </form>
program/js/tiny_mce/plugins/table/css/cell.css
program/js/tiny_mce/plugins/table/css/row.css
program/js/tiny_mce/plugins/table/css/table.css
@@ -1,7 +1,7 @@
/* CSS file for table dialog in the table plugin */
.panel_wrapper div.current {
    height: 220px;
    height: 245px;
}
.advfield {
program/js/tiny_mce/plugins/table/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('table');var TinyMCE_TablePlugin={getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){if(tinyMCE.isGecko){var doc=inst.getDoc();tinyMCE.addEvent(doc,"mouseup",TinyMCE_TablePlugin._mouseDownHandler)}inst.tableRowClipboard=null},getControlHTML:function(control_name){var controls=new Array(['table','table.gif','lang_table_desc','mceInsertTable',true],['delete_table','table_delete.gif','lang_table_del','mceTableDelete'],['delete_col','table_delete_col.gif','lang_table_delete_col_desc','mceTableDeleteCol'],['delete_row','table_delete_row.gif','lang_table_delete_row_desc','mceTableDeleteRow'],['col_after','table_insert_col_after.gif','lang_table_col_after_desc','mceTableInsertColAfter'],['col_before','table_insert_col_before.gif','lang_table_col_before_desc','mceTableInsertColBefore'],['row_after','table_insert_row_after.gif','lang_table_row_after_desc','mceTableInsertRowAfter'],['row_before','table_insert_row_before.gif','lang_table_row_before_desc','mceTableInsertRowBefore'],['row_props','table_row_props.gif','lang_table_row_desc','mceTableRowProps',true],['cell_props','table_cell_props.gif','lang_table_cell_desc','mceTableCellProps',true],['split_cells','table_split_cells.gif','lang_table_split_cells_desc','mceTableSplitCells',true],['merge_cells','table_merge_cells.gif','lang_table_merge_cells_desc','mceTableMergeCells',true]);for(var i=0;i<controls.length;i++){var but=controls[i];var cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+but[3]+'\', '+(but.length>4?but[4]:false)+(but.length>5?', \''+but[5]+'\'':'')+');return false;';if(but[0]==control_name)return tinyMCE.getButtonHTML(control_name,but[2],'{$pluginurl}/images/'+but[1],but[3],(but.length>4?but[4]:false))}if(control_name=="tablecontrols"){var html="";html+=tinyMCE.getControlHTML("table");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_props");html+=tinyMCE.getControlHTML("cell_props");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_before");html+=tinyMCE.getControlHTML("row_after");html+=tinyMCE.getControlHTML("delete_row");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("col_before");html+=tinyMCE.getControlHTML("col_after");html+=tinyMCE.getControlHTML("delete_col");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("split_cells");html+=tinyMCE.getControlHTML("merge_cells");return html}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":var inst=tinyMCE.getInstanceById(editor_id);inst.execCommand('mceBeginUndoLevel');TinyMCE_TablePlugin._doExecCommand(editor_id,element,command,user_interface,value);inst.execCommand('mceEndUndoLevel');return true}return false},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){var colspan="1",rowspan="1",tdElm;var inst=tinyMCE.getInstanceById(editor_id);tinyMCE.switchClass(editor_id+'_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_table','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_cell_props','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_row_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_before','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_col_after','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_split_cells','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonDisabled');if(tdElm=tinyMCE.getParentElement(node,"td,th")){tinyMCE.switchClass(editor_id+'_cell_props','mceButtonSelected');tinyMCE.switchClass(editor_id+'_delete_table','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_row_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_row','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_before','mceButtonNormal');tinyMCE.switchClass(editor_id+'_col_after','mceButtonNormal');tinyMCE.switchClass(editor_id+'_delete_col','mceButtonNormal');colspan=tinyMCE.getAttrib(tdElm,"colspan");rowspan=tinyMCE.getAttrib(tdElm,"rowspan");colspan=colspan==""?"1":colspan;rowspan=rowspan==""?"1":rowspan;if(colspan!="1"||rowspan!="1")tinyMCE.switchClass(editor_id+'_split_cells','mceButtonNormal')}if(tinyMCE.getParentElement(node,"tr"))tinyMCE.switchClass(editor_id+'_row_props','mceButtonSelected');if(tinyMCE.getParentElement(node,"table")){tinyMCE.switchClass(editor_id+'_table','mceButtonSelected');tinyMCE.switchClass(editor_id+'_merge_cells','mceButtonNormal')}},_mouseDownHandler:function(e){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var focusElm=tinyMCE.selectedInstance.getFocusElement();if(elm.nodeName=="BODY"&&(focusElm.nodeName=="TD"||focusElm.nodeName=="TH"||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TD")||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TH"))){window.setTimeout(function(){var tableElm=tinyMCE.getParentElement(focusElm,"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance)},10)}},_doExecCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();var trElm=tinyMCE.getParentElement(focusElm,"tr");var tdElm=tinyMCE.getParentElement(focusElm,"td,th");var tableElm=tinyMCE.getParentElement(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true}return false}function makeTD(){var newTD=doc.createElement("td");newTD.innerHTML="&nbsp;"}function getColRowSpan(td){var colspan=tinyMCE.getAttrib(td,"colspan");var rowspan=tinyMCE.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan}}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y}}}return null}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null}function getTableGrid(table){var grid=new Array(),rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=new Array();for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td}}}return grid}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td}deleteMarked(tableElm)}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node}return null}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node}}return null}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td)}while((td=nexttd)!=null)}}while((tr=next)!=null)}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");newTD.innerHTML="&nbsp;";if(tinyMCE.isMSIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR")}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=tinyMCE.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break}}}if(newTD==null){newTD=doc.createElement("td");newTD.innerHTML="&nbsp;"}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm}return newTR}switch(command){case"mceTableRowProps":if(trElm==null)return true;if(user_interface){var template=new Array();template['file']='../../plugins/table/row.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_rowprops_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_rowprops_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes"})}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){var template=new Array();template['file']='../../plugins/table/cell.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_cellprops_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_cellprops_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes"})}return true;case"mceInsertTable":if(user_interface){var template=new Array();template['file']='../../plugins/table/table.htm';template['width']=380;template['height']=295;template['width']+=tinyMCE.getLang('lang_table_table_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_table_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:value})}return true;case"mceTableDelete":var table=tinyMCE.getParentElement(inst.getFocusElement(),"table");if(table){table.parentNode.removeChild(table);inst.repaint()}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML="&nbsp;";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD)}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm}}trElm.parentNode.insertBefore(newTR,trElm);grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex+1,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML="&nbsp;";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD)}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR)}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){tableElm=tinyMCE.getParentElement(tableElm,"table");tableElm.parentNode.removeChild(tableElm);return true}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD)}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true}lastTDElm=tdElm}}deleteMarked(tableElm);cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,0),tinyMCE.isGecko,true);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML="&nbsp;";newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm)}else tdElm.colSpan++;lastTDElm=tdElm}}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex+1),tinyMCE.isGecko,true);break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);newTD.innerHTML="&nbsp;";newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD)}else tdElm.colSpan++;lastTDElm=tdElm}}grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,cpos.cellindex),tinyMCE.isGecko,true);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){tableElm=tinyMCE.getParentElement(tableElm,"table");tableElm.parentNode.removeChild(tableElm);return true}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm)}lastTDElm=tdElm}}cpos.cellindex--;if(cpos.cellindex<0)cpos.cellindex=0;grid=getTableGrid(tableElm);inst.selection.selectNode(getCell(grid,cpos.rowindex,0),tinyMCE.isGecko,true);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");newTD.innerHTML="&nbsp;";trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan)}addRows(tdElm,trElm,rowspan)}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");break;case"mceTableMergeCells":var rows=new Array();var sel=inst.getSel();var grid=getTableGrid(tableElm);if(tinyMCE.isMSIE||sel.rangeCount==1){if(user_interface){var template=new Array();var sp=getColRowSpan(tdElm);template['file']='../../plugins/table/merge_cells.htm';template['width']=250;template['height']=105+(tinyMCE.isNS7?25:0);template['width']+=tinyMCE.getLang('lang_table_merge_cells_delta_width',0);template['height']+=tinyMCE.getLang('lang_table_merge_cells_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,inline:"yes",action:"update",numcols:sp.colspan,numrows:sp.rowspan});return true}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=new Array();for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td}}if(rowCells.length>0)rows[rows.length]=rowCells}}}else{var cells=new Array();var sel=inst.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD")cells[cells.length]=tdElm}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=new Array();for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td}}}if(rowCells.length>0)rows[rows.length]=rowCells}var curRow=new Array();var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y}x2=x;y2=y;grid[y][x]._selected=true}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true}lastRowSpan=sd['rowspan']}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true}lastColSpan=sd['colspan']}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=tinyMCE.regexpReplace(html,"[ \t\r\n]","");if(chk!="<br/>"&&chk!="<br>"&&chk!="&nbsp;"&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm}if(tdElm.rowSpan>1)tdElm.rowSpan--}}}}break}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual'],tinyMCE.selectedInstance);tinyMCE.triggerNodeChange();inst.repaint()}return true}return false}};tinyMCE.addPlugin("table",TinyMCE_TablePlugin);
(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.TablePlugin',{init:function(ed,url){var t=this;t.editor=ed;t.url=url;each([['table','table.desc','mceInsertTable',true],['delete_table','table.del','mceTableDelete'],['delete_col','table.delete_col_desc','mceTableDeleteCol'],['delete_row','table.delete_row_desc','mceTableDeleteRow'],['col_after','table.col_after_desc','mceTableInsertColAfter'],['col_before','table.col_before_desc','mceTableInsertColBefore'],['row_after','table.row_after_desc','mceTableInsertRowAfter'],['row_before','table.row_before_desc','mceTableInsertRowBefore'],['row_props','table.row_desc','mceTableRowProps',true],['cell_props','table.cell_desc','mceTableCellProps',true],['split_cells','table.split_cells_desc','mceTableSplitCells',true],['merge_cells','table.merge_cells_desc','mceTableMergeCells',true]],function(c){ed.addButton(c[0],{title:c[1],cmd:c[2],ui:c[3]});});ed.onInit.add(function(){if(ed&&ed.plugins.contextmenu){ed.plugins.contextmenu.onContextMenu.add(function(th,m,e){var sm,se=ed.selection,el=se.getNode()||ed.getBody();if(ed.dom.getParent(e,'td')||ed.dom.getParent(e,'th')){m.removeAll();if(el.nodeName=='A'&&!ed.dom.getAttrib(el,'name')){m.add({title:'advanced.link_desc',icon:'link',cmd:ed.plugins.advlink?'mceAdvLink':'mceLink',ui:true});m.add({title:'advanced.unlink_desc',icon:'unlink',cmd:'UnLink'});m.addSeparator();}if(el.nodeName=='IMG'&&el.className.indexOf('mceItem')==-1){m.add({title:'advanced.image_desc',icon:'image',cmd:ed.plugins.advimage?'mceAdvImage':'mceImage',ui:true});m.addSeparator();}m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true,value:{action:'insert'}});m.add({title:'table.props_desc',icon:'table_props',cmd:'mceInsertTable',ui:true});m.add({title:'table.del',icon:'delete_table',cmd:'mceTableDelete',ui:true});m.addSeparator();sm=m.addMenu({title:'table.cell'});sm.add({title:'table.cell_desc',icon:'cell_props',cmd:'mceTableCellProps',ui:true});sm.add({title:'table.split_cells_desc',icon:'split_cells',cmd:'mceTableSplitCells',ui:true});sm.add({title:'table.merge_cells_desc',icon:'merge_cells',cmd:'mceTableMergeCells',ui:true});sm=m.addMenu({title:'table.row'});sm.add({title:'table.row_desc',icon:'row_props',cmd:'mceTableRowProps',ui:true});sm.add({title:'table.row_before_desc',icon:'row_before',cmd:'mceTableInsertRowBefore'});sm.add({title:'table.row_after_desc',icon:'row_after',cmd:'mceTableInsertRowAfter'});sm.add({title:'table.delete_row_desc',icon:'delete_row',cmd:'mceTableDeleteRow'});sm.addSeparator();sm.add({title:'table.cut_row_desc',icon:'cut',cmd:'mceTableCutRow'});sm.add({title:'table.copy_row_desc',icon:'copy',cmd:'mceTableCopyRow'});sm.add({title:'table.paste_row_before_desc',icon:'paste',cmd:'mceTablePasteRowBefore'});sm.add({title:'table.paste_row_after_desc',icon:'paste',cmd:'mceTablePasteRowAfter'});sm=m.addMenu({title:'table.col'});sm.add({title:'table.col_before_desc',icon:'col_before',cmd:'mceTableInsertColBefore'});sm.add({title:'table.col_after_desc',icon:'col_after',cmd:'mceTableInsertColAfter'});sm.add({title:'table.delete_col_desc',icon:'delete_col',cmd:'mceTableDeleteCol'});}else m.add({title:'table.desc',icon:'table',cmd:'mceInsertTable',ui:true});});}});ed.onKeyDown.add(function(ed,e){if(e.keyCode==9&&ed.dom.getParent(ed.selection.getNode(),'TABLE'))ed.undoManager.add();});ed.onNodeChange.add(function(ed,cm,n){var p=ed.dom.getParent(n,'td,th,caption');cm.setActive('table',!!p);if(p&&p.nodeName==='CAPTION')p=null;cm.setDisabled('delete_table',!p);cm.setDisabled('delete_col',!p);cm.setDisabled('delete_table',!p);cm.setDisabled('delete_row',!p);cm.setDisabled('col_after',!p);cm.setDisabled('col_before',!p);cm.setDisabled('row_after',!p);cm.setDisabled('row_before',!p);cm.setDisabled('row_props',!p);cm.setDisabled('cell_props',!p);cm.setDisabled('split_cells',!p||(parseInt(ed.dom.getAttrib(p,'colspan','1'))<2&&parseInt(ed.dom.getAttrib(p,'rowspan','1'))<2));cm.setDisabled('merge_cells',!p);});if(!tinymce.isIE){ed.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?'<$1$2>&nbsp;</$1>':'<$1$2><br mce_bogus="1" /></$1>');});}},execCommand:function(cmd,ui,val){var ed=this.editor,b;switch(cmd){case"mceInsertTable":case"mceTableRowProps":case"mceTableCellProps":case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":case"mceTableDelete":ed.execCommand('mceBeginUndoLevel');this._doExecCommand(cmd,ui,val);ed.execCommand('mceEndUndoLevel');return true;}return false;},getInfo:function(){return{longname:'Tables',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_doExecCommand:function(command,user_interface,value){var inst=this.editor,ed=inst,url=this.url;var focusElm=inst.selection.getNode();var trElm=inst.dom.getParent(focusElm,"tr");var tdElm=inst.dom.getParent(focusElm,"td,th");var tableElm=inst.dom.getParent(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i<ar.length;i++){if(ar[i].length>0&&inArray(ar[i],v))return true;if(ar[i]==v)return true;}return false;}function select(dx,dy){var td;grid=getTableGrid(tableElm);dx=dx||0;dy=dy||0;dx=Math.max(cpos.cellindex+dx,0);dy=Math.max(cpos.rowindex+dy,0);inst.execCommand('mceRepaint');td=getCell(grid,dy,dx);if(td){inst.selection.select(td.firstChild||td);inst.selection.collapse(1);}};function makeTD(){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}function getColRowSpan(td){var colspan=inst.dom.getAttrib(td,"colspan");var rowspan=inst.dom.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan};}function getCellPos(grid,td){var x,y;for(y=0;y<grid.length;y++){for(x=0;x<grid[y].length;x++){if(grid[y][x]==td)return{cellindex:x,rowindex:y};}}return null;}function getCell(grid,row,col){if(grid[row]&&grid[row][col])return grid[row][col];return null;}function getTableGrid(table){var grid=[],rows=table.rows,x,y,td,sd,xstart,x2,y2;for(y=0;y<rows.length;y++){for(x=0;x<rows[y].cells.length;x++){td=rows[y].cells[x];sd=getColRowSpan(td);for(xstart=x;grid[y]&&grid[y][xstart];xstart++);for(y2=y;y2<y+sd['rowspan'];y2++){if(!grid[y2])grid[y2]=[];for(x2=xstart;x2<xstart+sd['colspan'];x2++)grid[y2][x2]=td;}}}return grid;}function trimRow(table,tr,td,new_tr){var grid=getTableGrid(table),cpos=getCellPos(grid,td);var cells,lastElm;if(new_tr.cells.length!=tr.childNodes.length){cells=tr.childNodes;lastElm=null;for(var x=0;td=getCell(grid,cpos.rowindex,x);x++){var remove=true;var sd=getColRowSpan(td);if(inArray(cells,td)){new_tr.childNodes[x]._delete=true;}else if((lastElm==null||td!=lastElm)&&sd.colspan>1){for(var i=x;i<x+td.colSpan;i++)new_tr.childNodes[i]._delete=true;}if((lastElm==null||td!=lastElm)&&sd.rowspan>1)td.rowSpan=sd.rowspan+1;lastElm=td;}deleteMarked(tableElm);}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node;}return null;}function nextElm(node,names){var namesAr=names.split(',');while((node=node.nextSibling)!=null){for(var i=0;i<namesAr.length;i++){if(node.nodeName.toLowerCase()==namesAr[i].toLowerCase())return node;}}return null;}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue;}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD,TH");if(td._delete)td.parentNode.removeChild(td);}while((td=nexttd)!=null);}}while((tr=next)!=null);}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;i<rowspan&&trNext;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';if(tinymce.isIE)trNext.insertBefore(newTD,trNext.cells(td_elm.cellIndex));else trNext.insertBefore(newTD,trNext.cells[td_elm.cellIndex]);trNext=nextElm(trNext,"TR");}}function copyRow(doc,table,tr){var grid=getTableGrid(table);var newTR=tr.cloneNode(false);var cpos=getCellPos(grid,tr.cells[0]);var lastCell=null;var tableBorder=inst.dom.getAttrib(table,"border");var tdElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){var newTD=null;if(lastCell!=tdElm){for(var i=0;i<tr.cells.length;i++){if(tdElm==tr.cells[i]){newTD=tdElm.cloneNode(true);break;}}}if(newTD==null){newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';}newTD.colSpan=1;newTD.rowSpan=1;newTR.appendChild(newTD);lastCell=tdElm;}return newTR;}switch(command){case"mceTableRowProps":if(trElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/row.htm',width:400+parseInt(inst.getLang('table.rowprops_delta_width',0)),height:295+parseInt(inst.getLang('table.rowprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceTableCellProps":if(tdElm==null)return true;if(user_interface){inst.windowManager.open({url:url+'/cell.htm',width:400+parseInt(inst.getLang('table.cellprops_delta_width',0)),height:295+parseInt(inst.getLang('table.cellprops_delta_height',0)),inline:1},{plugin_url:url});}return true;case"mceInsertTable":if(user_interface){inst.windowManager.open({url:url+'/table.htm',width:400+parseInt(inst.getLang('table.table_delta_width',0)),height:320+parseInt(inst.getLang('table.table_delta_height',0)),inline:1},{plugin_url:url,action:value?value.action:0});}return true;case"mceTableDelete":var table=inst.dom.getParent(inst.selection.getNode(),"table");if(table){table.parentNode.removeChild(table);inst.execCommand('mceRepaint');}return true;case"mceTableSplitCells":case"mceTableMergeCells":case"mceTableInsertRowBefore":case"mceTableInsertRowAfter":case"mceTableDeleteRow":case"mceTableInsertColBefore":case"mceTableInsertColAfter":case"mceTableDeleteCol":case"mceTableCutRow":case"mceTableCopyRow":case"mceTablePasteRowBefore":case"mceTablePasteRowAfter":if(!tableElm)return true;if(trElm&&tableElm!=trElm.parentNode)tableElm=trElm.parentNode;if(tableElm&&trElm){switch(command){case"mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case"mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case"mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case"mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}trElm.parentNode.insertBefore(newTR,trElm);select(0,1);break;case"mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR);}select(0,1);break;case"mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x<cells.length;x++){if(cells[x].rowSpan>1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD);}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1;}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true;}lastTDElm=tdElm;}}deleteMarked(tableElm);select(0,-1);break;case"mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm);}else tdElm.colSpan++;lastTDElm=tdElm;}}select();break;case"mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement(tdElm.nodeName);if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD,TH");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD);}else tdElm.colSpan++;lastTDElm=tdElm;}}select(1);break;case"mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){inst.dom.remove(inst.dom.getParent(tableElm,"table"));return true;}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm);}lastTDElm=tdElm;}}select(-1);break;case"mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i<colspan;i++){var newTD=doc.createElement("td");if(!tinymce.isIE)newTD.innerHTML='<br mce_bogus="1"/>';trElm.insertBefore(newTD,nextElm(tdElm,"TD,TH"));if(rowspan>1)addRows(newTD,trElm,rowspan);}addRows(tdElm,trElm,rowspan);}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");break;case"mceTableMergeCells":var rows=[];var sel=inst.selection.getSel();var grid=getTableGrid(tableElm);if(tinymce.isIE||sel.rangeCount==1){if(user_interface){var sp=getColRowSpan(tdElm);inst.windowManager.open({url:url+'/merge_cells.htm',width:240+parseInt(inst.getLang('table.merge_cells_delta_width',0)),height:110+parseInt(inst.getLang('table.merge_cells_delta_height',0)),inline:1},{action:"update",numcols:sp.colspan,numrows:sp.rowspan,plugin_url:url});return true;}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y<grid.length;y++){var rowCells=[];for(var x=cpos.cellindex;x<grid[y].length;x++){var td=getCell(grid,y,x);if(td&&!inArray(rows,td)&&!inArray(rowCells,td)){var cp=getCellPos(grid,td);if(cp.cellindex<cpos.cellindex+numCols&&cp.rowindex<cpos.rowindex+numRows)rowCells[rowCells.length]=td;}}if(rowCells.length>0)rows[rows.length]=rowCells;var td=getCell(grid,cpos.rowindex,cpos.cellindex);each(ed.dom.select('br',td),function(e,i){if(i>0&&ed.dom.getAttrib('mce_bogus'))ed.dom.remove(e);});}}}else{var cells=[];var sel=inst.selection.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i<sel.rangeCount;i++){var rng=sel.getRangeAt(i);var tdElm=rng.startContainer.childNodes[rng.startOffset];if(!tdElm)break;if(tdElm.nodeName=="TD")cells[cells.length]=tdElm;}var tRows=tableElm.rows;for(var y=0;y<tRows.length;y++){var rowCells=[];for(var x=0;x<tRows[y].cells.length;x++){var td=tRows[y].cells[x];for(var i=0;i<cells.length;i++){if(td==cells[i]){rowCells[rowCells.length]=td;}}}if(rowCells.length>0)rows[rows.length]=rowCells;}var curRow=[];var lastTR=null;for(var y=0;y<grid.length;y++){for(var x=0;x<grid[y].length;x++){grid[y][x]._selected=false;for(var i=0;i<cells.length;i++){if(grid[y][x]==cells[i]){if(x1==-1){x1=x;y1=y;}x2=x;y2=y;grid[y][x]._selected=true;}}}}for(var y=y1;y<=y2;y++){for(var x=x1;x<=x2;x++){if(!grid[y][x]._selected){alert("Invalid selection for merge.");return true;}}}}var rowSpan=1,colSpan=1;var lastRowSpan=-1;for(var y=0;y<rows.length;y++){var rowColSpan=0;for(var x=0;x<rows[y].length;x++){var sd=getColRowSpan(rows[y][x]);rowColSpan+=sd['colspan'];if(lastRowSpan!=-1&&sd['rowspan']!=lastRowSpan){alert("Invalid selection for merge.");return true;}lastRowSpan=sd['rowspan'];}if(rowColSpan>colSpan)colSpan=rowColSpan;lastRowSpan=-1;}var lastColSpan=-1;for(var x=0;x<rows[0].length;x++){var colRowSpan=0;for(var y=0;y<rows.length;y++){var sd=getColRowSpan(rows[y][x]);colRowSpan+=sd['rowspan'];if(lastColSpan!=-1&&sd['colspan']!=lastColSpan){alert("Invalid selection for merge.");return true;}lastColSpan=sd['colspan'];}if(colRowSpan>rowSpan)rowSpan=colRowSpan;lastColSpan=-1;}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y<rows.length;y++){for(var x=0;x<rows[y].length;x++){var html=rows[y][x].innerHTML;var chk=html.replace(/[ \t\r\n]/g,"");if(chk!="<br/>"&&chk!="<br>"&&chk!='<br mce_bogus="1"/>'&&(x+y>0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm;}if(tdElm.rowSpan>1)tdElm.rowSpan--;}}}}each(ed.dom.select('br',tdElm),function(e,i){if(i>0&&ed.dom.getAttrib(e,'mce_bogus'))ed.dom.remove(e);});break;}tableElm=inst.dom.getParent(inst.selection.getNode(),"table");inst.addVisual(tableElm);inst.nodeChanged();}return true;}return false;}});tinymce.PluginManager.add('table',tinymce.plugins.TablePlugin);})();
program/js/tiny_mce/plugins/table/editor_plugin_src.js
@@ -1,92 +1,132 @@
/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 * $Id: editor_plugin_src.js 768 2008-04-04 13:52:49Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('table');
(function() {
    var each = tinymce.each;
var TinyMCE_TablePlugin = {
    getInfo : function() {
        return {
            longname : 'Tables',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
        };
    },
    tinymce.create('tinymce.plugins.TablePlugin', {
        init : function(ed, url) {
            var t = this;
    initInstance : function(inst) {
        if (tinyMCE.isGecko) {
            var doc = inst.getDoc();
            tinyMCE.addEvent(doc, "mouseup", TinyMCE_TablePlugin._mouseDownHandler);
            t.editor = ed;
            t.url = url;
            // Register buttons
            each([
                ['table', 'table.desc', 'mceInsertTable', true],
                ['delete_table', 'table.del', 'mceTableDelete'],
                ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],
                ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],
                ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],
                ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],
                ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],
                ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],
                ['row_props', 'table.row_desc', 'mceTableRowProps', true],
                ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],
                ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],
                ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]
            ], function(c) {
                ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});
            });
            ed.onInit.add(function() {
                if (ed && ed.plugins.contextmenu) {
                    ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
                        var sm, se = ed.selection, el = se.getNode() || ed.getBody();
                        if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th')) {
                            m.removeAll();
                            if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {
                                m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});
                                m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});
                                m.addSeparator();
        }
        inst.tableRowClipboard = null;
    },
    /**
     * Returns the HTML contents of the table control.
     */
    getControlHTML : function(control_name) {
        var controls = new Array(
            ['table', 'table.gif', 'lang_table_desc', 'mceInsertTable', true],
            ['delete_table', 'table_delete.gif', 'lang_table_del', 'mceTableDelete'],
            ['delete_col', 'table_delete_col.gif', 'lang_table_delete_col_desc', 'mceTableDeleteCol'],
            ['delete_row', 'table_delete_row.gif', 'lang_table_delete_row_desc', 'mceTableDeleteRow'],
            ['col_after', 'table_insert_col_after.gif', 'lang_table_col_after_desc', 'mceTableInsertColAfter'],
            ['col_before', 'table_insert_col_before.gif', 'lang_table_col_before_desc', 'mceTableInsertColBefore'],
            ['row_after', 'table_insert_row_after.gif', 'lang_table_row_after_desc', 'mceTableInsertRowAfter'],
            ['row_before', 'table_insert_row_before.gif', 'lang_table_row_before_desc', 'mceTableInsertRowBefore'],
            ['row_props', 'table_row_props.gif', 'lang_table_row_desc', 'mceTableRowProps', true],
            ['cell_props', 'table_cell_props.gif', 'lang_table_cell_desc', 'mceTableCellProps', true],
            ['split_cells', 'table_split_cells.gif', 'lang_table_split_cells_desc', 'mceTableSplitCells', true],
            ['merge_cells', 'table_merge_cells.gif', 'lang_table_merge_cells_desc', 'mceTableMergeCells', true]);
        // Render table control
        for (var i=0; i<controls.length; i++) {
            var but = controls[i];
            var cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + but[3] + '\', ' + (but.length > 4 ? but[4] : false) + (but.length > 5 ? ', \'' + but[5] + '\'' : '') + ');return false;';
            if (but[0] == control_name)
                return tinyMCE.getButtonHTML(control_name, but[2], '{$pluginurl}/images/'+ but[1], but[3], (but.length > 4 ? but[4] : false));
                            if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {
                                m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});
                                m.addSeparator();
        }
        // Special tablecontrols
        if (control_name == "tablecontrols") {
            var html = "";
                            m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true, value : {action : 'insert'}});
                            m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable', ui : true});
                            m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete', ui : true});
                            m.addSeparator();
            html += tinyMCE.getControlHTML("table");
            html += tinyMCE.getControlHTML("separator");
            html += tinyMCE.getControlHTML("row_props");
            html += tinyMCE.getControlHTML("cell_props");
            html += tinyMCE.getControlHTML("separator");
            html += tinyMCE.getControlHTML("row_before");
            html += tinyMCE.getControlHTML("row_after");
            html += tinyMCE.getControlHTML("delete_row");
            html += tinyMCE.getControlHTML("separator");
            html += tinyMCE.getControlHTML("col_before");
            html += tinyMCE.getControlHTML("col_after");
            html += tinyMCE.getControlHTML("delete_col");
            html += tinyMCE.getControlHTML("separator");
            html += tinyMCE.getControlHTML("split_cells");
            html += tinyMCE.getControlHTML("merge_cells");
                            // Cell menu
                            sm = m.addMenu({title : 'table.cell'});
                            sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps', ui : true});
                            sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells', ui : true});
                            sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells', ui : true});
            return html;
                            // Row menu
                            sm = m.addMenu({title : 'table.row'});
                            sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps', ui : true});
                            sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});
                            sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});
                            sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});
                            sm.addSeparator();
                            sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});
                            sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});
                            sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'});
                            sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'});
                            // Column menu
                            sm = m.addMenu({title : 'table.col'});
                            sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});
                            sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});
                            sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});
                        } else
                            m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', ui : true});
                    });
        }
            });
        return "";
            // Add undo level when new rows are created using the tab key
            ed.onKeyDown.add(function(ed, e) {
                if (e.keyCode == 9 && ed.dom.getParent(ed.selection.getNode(), 'TABLE'))
                    ed.undoManager.add();
            });
            ed.onNodeChange.add(function(ed, cm, n) {
                var p = ed.dom.getParent(n, 'td,th,caption');
                cm.setActive('table', !!p);
                if (p && p.nodeName === 'CAPTION')
                    p = null;
                cm.setDisabled('delete_table', !p);
                cm.setDisabled('delete_col', !p);
                cm.setDisabled('delete_table', !p);
                cm.setDisabled('delete_row', !p);
                cm.setDisabled('col_after', !p);
                cm.setDisabled('col_before', !p);
                cm.setDisabled('row_after', !p);
                cm.setDisabled('row_before', !p);
                cm.setDisabled('row_props', !p);
                cm.setDisabled('cell_props', !p);
                cm.setDisabled('split_cells', !p || (parseInt(ed.dom.getAttrib(p, 'colspan', '1')) < 2 && parseInt(ed.dom.getAttrib(p, 'rowspan', '1')) < 2));
                cm.setDisabled('merge_cells', !p);
            });
            // Padd empty table cells
            if (!tinymce.isIE) {
                ed.onBeforeSetContent.add(function(ed, o) {
                    if (o.initial)
                        o.content = o.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g, tinymce.isOpera ? '<$1$2>&nbsp;</$1>' : '<$1$2><br mce_bogus="1" /></$1>');
                });
            }
    },
    /**
     * Executes the table commands.
     */
    execCommand : function(editor_id, element, command, user_interface, value) {
        execCommand : function(cmd, ui, val) {
            var ed = this.editor, b;
        // Is table command
        switch (command) {
            switch (cmd) {
            case "mceInsertTable":
            case "mceTableRowProps":
            case "mceTableCellProps":
@@ -103,11 +143,9 @@
            case "mceTablePasteRowBefore":
            case "mceTablePasteRowAfter":
            case "mceTableDelete":
                var inst = tinyMCE.getInstanceById(editor_id);
                inst.execCommand('mceBeginUndoLevel');
                TinyMCE_TablePlugin._doExecCommand(editor_id, element, command, user_interface, value);
                inst.execCommand('mceEndUndoLevel');
                    ed.execCommand('mceBeginUndoLevel');
                    this._doExecCommand(cmd, ui, val);
                    ed.execCommand('mceEndUndoLevel');
                return true;
        }
@@ -116,81 +154,27 @@
        return false;
    },
    handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
        var colspan = "1", rowspan = "1", tdElm;
        var inst = tinyMCE.getInstanceById(editor_id);
        // Reset table controls
        tinyMCE.switchClass(editor_id + '_table', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_delete_table', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonDisabled');
        // Within a td element
        if (tdElm = tinyMCE.getParentElement(node, "td,th")) {
            tinyMCE.switchClass(editor_id + '_cell_props', 'mceButtonSelected');
            tinyMCE.switchClass(editor_id + '_delete_table', 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_row_before', 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_row_after', 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_delete_row', 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_col_before', 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_col_after', 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_delete_col', 'mceButtonNormal');
            colspan = tinyMCE.getAttrib(tdElm, "colspan");
            rowspan = tinyMCE.getAttrib(tdElm, "rowspan");
            colspan = colspan == "" ? "1" : colspan;
            rowspan = rowspan == "" ? "1" : rowspan;
            if (colspan != "1" || rowspan != "1")
                tinyMCE.switchClass(editor_id + '_split_cells', 'mceButtonNormal');
        }
        // Within a tr element
        if (tinyMCE.getParentElement(node, "tr"))
            tinyMCE.switchClass(editor_id + '_row_props', 'mceButtonSelected');
        // Within table
        if (tinyMCE.getParentElement(node, "table")) {
            tinyMCE.switchClass(editor_id + '_table', 'mceButtonSelected');
            tinyMCE.switchClass(editor_id + '_merge_cells', 'mceButtonNormal');
        }
        getInfo : function() {
            return {
                longname : 'Tables',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/table',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
    },
    // Private plugin internal methods
    _mouseDownHandler : function(e) {
        var elm = tinyMCE.isMSIE ? event.srcElement : e.target;
        var focusElm = tinyMCE.selectedInstance.getFocusElement();
        // If press on special Mozilla create TD/TR thingie
        if (elm.nodeName == "BODY" && (focusElm.nodeName == "TD" || focusElm.nodeName == "TH" || (focusElm.parentNode && focusElm.parentNode.nodeName == "TD") ||(focusElm.parentNode && focusElm.parentNode.nodeName == "TH") )) {
            window.setTimeout(function() {
                var tableElm = tinyMCE.getParentElement(focusElm, "table");
                tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
            }, 10);
        }
    },
    /**
     * Executes the table commands.
     */
    _doExecCommand : function(editor_id, element, command, user_interface, value) {
        var inst = tinyMCE.getInstanceById(editor_id);
        var focusElm = inst.getFocusElement();
        var trElm = tinyMCE.getParentElement(focusElm, "tr");
        var tdElm = tinyMCE.getParentElement(focusElm, "td,th");
        var tableElm = tinyMCE.getParentElement(focusElm, "table");
        _doExecCommand : function(command, user_interface, value) {
            var inst = this.editor, ed = inst, url = this.url;
            var focusElm = inst.selection.getNode();
            var trElm = inst.dom.getParent(focusElm, "tr");
            var tdElm = inst.dom.getParent(focusElm, "td,th");
            var tableElm = inst.dom.getParent(focusElm, "table");
        var doc = inst.contentWindow.document;
        var tableBorder = tableElm ? tableElm.getAttribute("border") : "";
@@ -198,7 +182,6 @@
        if (trElm && tdElm == null)
            tdElm = trElm.cells[0];
        // ------- Inner functions ---------
        function inArray(ar, v) {
            for (var i=0; i<ar.length; i++) {
                // Is array
@@ -213,14 +196,35 @@
            return false;
        }
            function select(dx, dy) {
                var td;
                grid = getTableGrid(tableElm);
                dx = dx || 0;
                dy = dy || 0;
                dx = Math.max(cpos.cellindex + dx, 0);
                dy = Math.max(cpos.rowindex + dy, 0);
                // Recalculate grid and select
                inst.execCommand('mceRepaint');
                td = getCell(grid, dy, dx);
                if (td) {
                    inst.selection.select(td.firstChild || td);
                    inst.selection.collapse(1);
                }
            };
        function makeTD() {
            var newTD = doc.createElement("td");
            newTD.innerHTML = "&nbsp;";
                if (!tinymce.isIE)
                    newTD.innerHTML = '<br mce_bogus="1"/>';
        }
        function getColRowSpan(td) {
            var colspan = tinyMCE.getAttrib(td, "colspan");
            var rowspan = tinyMCE.getAttrib(td, "rowspan");
                var colspan = inst.dom.getAttrib(td, "colspan");
                var rowspan = inst.dom.getAttrib(td, "rowspan");
            colspan = colspan == "" ? 1 : parseInt(colspan);
            rowspan = rowspan == "" ? 1 : parseInt(rowspan);
@@ -249,7 +253,7 @@
        }
        function getTableGrid(table) {
            var grid = new Array(), rows = table.rows, x, y, td, sd, xstart, x2, y2;
                var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;
            for (y=0; y<rows.length; y++) {
                for (x=0; x<rows[y].cells.length; x++) {
@@ -262,7 +266,7 @@
                    // Fill box
                    for (y2=y; y2<y+sd['rowspan']; y2++) {
                        if (!grid[y2])
                            grid[y2] = new Array();
                                grid[y2] = [];
                        for (x2=xstart; x2<xstart+sd['colspan']; x2++)
                            grid[y2][x2] = td;
@@ -359,9 +363,11 @@
            var trNext = nextElm(tr_elm, "TR");
            for (var i=1; i<rowspan && trNext; i++) {
                var newTD = doc.createElement("td");
                newTD.innerHTML = "&nbsp;";
                if (tinyMCE.isMSIE)
                    if (!tinymce.isIE)
                        newTD.innerHTML = '<br mce_bogus="1"/>';
                    if (tinymce.isIE)
                    trNext.insertBefore(newTD, trNext.cells(td_elm.cellIndex));
                else
                    trNext.insertBefore(newTD, trNext.cells[td_elm.cellIndex]);
@@ -375,7 +381,7 @@
            var newTR = tr.cloneNode(false);
            var cpos = getCellPos(grid, tr.cells[0]);
            var lastCell = null;
            var tableBorder = tinyMCE.getAttrib(table, "border");
                var tableBorder = inst.dom.getAttrib(table, "border");
            var tdElm = null;
            for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
@@ -392,7 +398,9 @@
                if (newTD == null) {
                    newTD = doc.createElement("td");
                    newTD.innerHTML = "&nbsp;";
                        if (!tinymce.isIE)
                            newTD.innerHTML = '<br mce_bogus="1"/>';
                }
                // Reset col/row span
@@ -416,19 +424,14 @@
                    return true;
                if (user_interface) {
                    // Setup template
                    var template = new Array();
                    template['file'] = '../../plugins/table/row.htm';
                    template['width'] = 380;
                    template['height'] = 295;
                    // Language specific width and height addons
                    template['width'] += tinyMCE.getLang('lang_table_rowprops_delta_width', 0);
                    template['height'] += tinyMCE.getLang('lang_table_rowprops_delta_height', 0);
                    // Open window
                    tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});
                        inst.windowManager.open({
                            url : url + '/row.htm',
                            width : 400 + parseInt(inst.getLang('table.rowprops_delta_width', 0)),
                            height : 295 + parseInt(inst.getLang('table.rowprops_delta_height', 0)),
                            inline : 1
                        }, {
                            plugin_url : url
                        });
                }
                return true;
@@ -438,47 +441,38 @@
                    return true;
                if (user_interface) {
                    // Setup template
                    var template = new Array();
                    template['file'] = '../../plugins/table/cell.htm';
                    template['width'] = 380;
                    template['height'] = 295;
                    // Language specific width and height addons
                    template['width'] += tinyMCE.getLang('lang_table_cellprops_delta_width', 0);
                    template['height'] += tinyMCE.getLang('lang_table_cellprops_delta_height', 0);
                    // Open window
                    tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});
                        inst.windowManager.open({
                            url : url + '/cell.htm',
                            width : 400 + parseInt(inst.getLang('table.cellprops_delta_width', 0)),
                            height : 295 + parseInt(inst.getLang('table.cellprops_delta_height', 0)),
                            inline : 1
                        }, {
                            plugin_url : url
                        });
                }
                return true;
            case "mceInsertTable":
                if (user_interface) {
                    // Setup template
                    var template = new Array();
                    template['file'] = '../../plugins/table/table.htm';
                    template['width'] = 380;
                    template['height'] = 295;
                    // Language specific width and height addons
                    template['width'] += tinyMCE.getLang('lang_table_table_delta_width', 0);
                    template['height'] += tinyMCE.getLang('lang_table_table_delta_height', 0);
                    // Open window
                    tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : value});
                        inst.windowManager.open({
                            url : url + '/table.htm',
                            width : 400 + parseInt(inst.getLang('table.table_delta_width', 0)),
                            height : 320 + parseInt(inst.getLang('table.table_delta_height', 0)),
                            inline : 1
                        }, {
                            plugin_url : url,
                            action : value ? value.action : 0
                        });
                }
                return true;
            case "mceTableDelete":
                var table = tinyMCE.getParentElement(inst.getFocusElement(), "table");
                    var table = inst.dom.getParent(inst.selection.getNode(), "table");
                if (table) {
                    table.parentNode.removeChild(table);
                    inst.repaint();
                        inst.execCommand('mceRepaint');
                }
                return true;
@@ -571,7 +565,9 @@
                                    if (sd['rowspan'] == 1) {
                                        var newTD = doc.createElement("td");
                                        newTD.innerHTML = "&nbsp;";
                                            if (!tinymce.isIE)
                                                newTD.innerHTML = '<br mce_bogus="1"/>';
                                        newTD.colSpan = tdElm.colSpan;
                                        newTR.appendChild(newTD);
@@ -583,9 +579,7 @@
                            }
                            trElm.parentNode.insertBefore(newTR, trElm);
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex + 1, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko
                                select(0, 1);
                        break;
                        case "mceTableInsertRowAfter":
@@ -605,7 +599,9 @@
                                    if (sd['rowspan'] == 1) {
                                        var newTD = doc.createElement("td");
                                        newTD.innerHTML = "&nbsp;";
                                            if (!tinymce.isIE)
                                                newTD.innerHTML = '<br mce_bogus="1"/>';
                                        newTD.colSpan = tdElm.colSpan;
                                        newTR.appendChild(newTD);
@@ -624,8 +620,7 @@
                                    tableElm.appendChild(newTR);
                            }
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko
                                select(0, 1);
                        break;
                        case "mceTableDeleteRow":
@@ -637,8 +632,7 @@
                            // Only one row, remove whole table
                            if (grid.length == 1) {
                                tableElm = tinyMCE.getParentElement(tableElm, "table"); // Look for table instead of tbody
                                tableElm.parentNode.removeChild(tableElm);
                                    inst.dom.remove(inst.dom.getParent(tableElm, "table"));
                                return true;
                            }
@@ -682,13 +676,7 @@
                            deleteMarked(tableElm);
                            cpos.rowindex--;
                            if (cpos.rowindex < 0)
                                cpos.rowindex = 0;
                            // Recalculate grid and select
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko
                                select(0, -1);
                        break;
                        case "mceTableInsertColBefore":
@@ -706,7 +694,9 @@
                                    if (sd['colspan'] == 1) {
                                        var newTD = doc.createElement(tdElm.nodeName);
                                        newTD.innerHTML = "&nbsp;";
                                            if (!tinymce.isIE)
                                                newTD.innerHTML = '<br mce_bogus="1"/>';
                                        newTD.rowSpan = tdElm.rowSpan;
                                        tdElm.parentNode.insertBefore(newTD, tdElm);
@@ -717,8 +707,7 @@
                                }
                            }
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex + 1), tinyMCE.isGecko, true); // Only collape on gecko
                                select();
                        break;
                        case "mceTableInsertColAfter":
@@ -736,7 +725,9 @@
                                    if (sd['colspan'] == 1) {
                                        var newTD = doc.createElement(tdElm.nodeName);
                                        newTD.innerHTML = "&nbsp;";
                                            if (!tinymce.isIE)
                                                newTD.innerHTML = '<br mce_bogus="1"/>';
                                        newTD.rowSpan = tdElm.rowSpan;
                                        var nextTD = nextElm(tdElm, "TD,TH");
@@ -751,8 +742,7 @@
                                }
                            }
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, cpos.cellindex), tinyMCE.isGecko, true); // Only collape on gecko
                                select(1);
                        break;
                        case "mceTableDeleteCol":
@@ -765,8 +755,7 @@
                            // Only one col, remove whole table
                            if (grid.length > 1 && grid[0].length <= 1) {
                                tableElm = tinyMCE.getParentElement(tableElm, "table"); // Look for table instead of tbody
                                tableElm.parentNode.removeChild(tableElm);
                                    inst.dom.remove(inst.dom.getParent(tableElm, "table"));
                                return true;
                            }
@@ -786,13 +775,7 @@
                                }
                            }
                            cpos.cellindex--;
                            if (cpos.cellindex < 0)
                                cpos.cellindex = 0;
                            // Recalculate grid and select
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko
                                select(-1);
                        break;
                    case "mceTableSplitCells":
@@ -811,7 +794,8 @@
                            for (var i=1; i<colspan; i++) {
                                var newTD = doc.createElement("td");
                                newTD.innerHTML = "&nbsp;";
                                    if (!tinymce.isIE)
                                        newTD.innerHTML = '<br mce_bogus="1"/>';
                                trElm.insertBefore(newTD, nextElm(tdElm, "TD,TH"));
@@ -823,30 +807,30 @@
                        }
                        // Apply visual aids
                        tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
                            tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
                        break;
                    case "mceTableMergeCells":
                        var rows = new Array();
                        var sel = inst.getSel();
                            var rows = [];
                            var sel = inst.selection.getSel();
                        var grid = getTableGrid(tableElm);
                        if (tinyMCE.isMSIE || sel.rangeCount == 1) {
                            if (tinymce.isIE || sel.rangeCount == 1) {
                            if (user_interface) {
                                // Setup template
                                var template = new Array();
                                var sp = getColRowSpan(tdElm);
                                template['file'] = '../../plugins/table/merge_cells.htm';
                                template['width'] = 250;
                                template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0);
                                // Language specific width and height addons
                                template['width'] += tinyMCE.getLang('lang_table_merge_cells_delta_width', 0);
                                template['height'] += tinyMCE.getLang('lang_table_merge_cells_delta_height', 0);
                                // Open window
                                tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : "update", numcols : sp.colspan, numrows : sp.rowspan});
                                    inst.windowManager.open({
                                        url : url + '/merge_cells.htm',
                                        width : 240 + parseInt(inst.getLang('table.merge_cells_delta_width', 0)),
                                        height : 110 + parseInt(inst.getLang('table.merge_cells_delta_height', 0)),
                                        inline : 1
                                    }, {
                                        action : "update",
                                        numcols : sp.colspan,
                                        numrows : sp.rowspan,
                                        plugin_url : url
                                    });
                                return true;
                            } else {
@@ -863,7 +847,7 @@
                                // Get rows and cells
                                var tRows = tableElm.rows;
                                for (var y=cpos.rowindex; y<grid.length; y++) {
                                    var rowCells = new Array();
                                        var rowCells = [];
                                    for (var x=cpos.cellindex; x<grid[y].length; x++) {
                                        var td = getCell(grid, y, x);
@@ -879,13 +863,19 @@
                                    if (rowCells.length > 0)
                                        rows[rows.length] = rowCells;
                                        var td = getCell(grid, cpos.rowindex, cpos.cellindex);
                                        each(ed.dom.select('br', td), function(e, i) {
                                            if (i > 0 && ed.dom.getAttrib('mce_bogus'))
                                                ed.dom.remove(e);
                                        });
                                }
                                //return true;
                            }
                        } else {
                            var cells = new Array();
                            var sel = inst.getSel();
                                var cells = [];
                                var sel = inst.selection.getSel();
                            var lastTR = null;
                            var curRow = null;
                            var x1 = -1, y1 = -1, x2, y2;
@@ -909,7 +899,7 @@
                            // Get rows and cells
                            var tRows = tableElm.rows;
                            for (var y=0; y<tRows.length; y++) {
                                var rowCells = new Array();
                                    var rowCells = [];
                                for (var x=0; x<tRows[y].cells.length; x++) {
                                    var td = tRows[y].cells[x];
@@ -926,7 +916,7 @@
                            }
                            // Find selected cells in grid and box
                            var curRow = new Array();
                                var curRow = [];
                            var lastTR = null;
                            for (var y=0; y<grid.length; y++) {
                                for (var x=0; x<grid[y].length; x++) {
@@ -1021,9 +1011,9 @@
                        for (var y=0; y<rows.length; y++) {
                            for (var x=0; x<rows[y].length; x++) {
                                var html = rows[y][x].innerHTML;
                                var chk = tinyMCE.regexpReplace(html, "[ \t\r\n]", "");
                                    var chk = html.replace(/[ \t\r\n]/g, "");
                                if (chk != "<br/>" && chk != "<br>" && chk != "&nbsp;" && (x+y > 0))
                                    if (chk != "<br/>" && chk != "<br>" && chk != '<br mce_bogus="1"/>' && (x+y > 0))
                                    tdElm.innerHTML += html;
                                // Not current cell
@@ -1053,13 +1043,18 @@
                            }
                        }
                            // Remove all but one bogus br
                            each(ed.dom.select('br', tdElm), function(e, i) {
                                if (i > 0 && ed.dom.getAttrib(e, 'mce_bogus'))
                                    ed.dom.remove(e);
                            });
                        break;
                    }
                    tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
                    tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
                    tinyMCE.triggerNodeChange();
                    inst.repaint();
                        tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
                        inst.addVisual(tableElm);
                        inst.nodeChanged();
                }
            return true;
@@ -1068,6 +1063,8 @@
        // Pass to next handler in chain
        return false;
    }
};
    });
tinyMCE.addPlugin("table", TinyMCE_TablePlugin);
    // Register plugin
    tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);
})();
program/js/tiny_mce/plugins/table/images/buttons.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_cell_props.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_delete.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_delete_col.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_delete_row.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_insert_col_after.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_insert_col_before.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_insert_row_after.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_insert_row_before.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_merge_cells.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_row_props.gif
Binary files differ
program/js/tiny_mce/plugins/table/images/table_split_cells.gif
Binary files differ
program/js/tiny_mce/plugins/table/js/cell.js
File was renamed from program/js/tiny_mce/plugins/table/jscripts/cell.js
@@ -1,32 +1,39 @@
tinyMCEPopup.requireLangPack();
var ed;
function init() {
    ed = tinyMCEPopup.editor;
    tinyMCEPopup.resizeToInnerSize();
    document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
    document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
    document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')
    var inst = tinyMCE.selectedInstance;
    var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th");
    var inst = ed;
    var tdElm = ed.dom.getParent(ed.selection.getNode(), "td,th");
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(tinyMCE.getAttrib(tdElm, "style"));
    var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));
    // Get table cell data
    var celltype = tdElm.nodeName.toLowerCase();
    var align = tinyMCE.getAttrib(tdElm, 'align');
    var valign = tinyMCE.getAttrib(tdElm, 'valign');
    var align = ed.dom.getAttrib(tdElm, 'align');
    var valign = ed.dom.getAttrib(tdElm, 'valign');
    var width = trimSize(getStyle(tdElm, 'width', 'width'));
    var height = trimSize(getStyle(tdElm, 'height', 'height'));
    var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));
    var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));
    var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tdElm, 'class'), false);
    var className = ed.dom.getAttrib(tdElm, 'class');
    var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
    var id = tinyMCE.getAttrib(tdElm, 'id');
    var lang = tinyMCE.getAttrib(tdElm, 'lang');
    var dir = tinyMCE.getAttrib(tdElm, 'dir');
    var scope = tinyMCE.getAttrib(tdElm, 'scope');
    var id = ed.dom.getAttrib(tdElm, 'id');
    var lang = ed.dom.getAttrib(tdElm, 'lang');
    var dir = ed.dom.getAttrib(tdElm, 'dir');
    var scope = ed.dom.getAttrib(tdElm, 'scope');
    // Setup form
    addClassesToList('class', 'table_cell_styles');
    TinyMCE_EditableSelects.init();
    formObj.bordercolor.value = bordercolor;
    formObj.bgcolor.value = bgcolor;
    formObj.backgroundimage.value = backgroundimage;
@@ -34,10 +41,10 @@
    formObj.height.value = height;
    formObj.id.value = id;
    formObj.lang.value = lang;
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = ed.dom.serializeStyle(st);
    selectByValue(formObj, 'align', align);
    selectByValue(formObj, 'valign', valign);
    selectByValue(formObj, 'class', className);
    selectByValue(formObj, 'class', className, true, true);
    selectByValue(formObj, 'celltype', celltype);
    selectByValue(formObj, 'dir', dir);
    selectByValue(formObj, 'scope', scope);
@@ -51,24 +58,24 @@
}
function updateAction() {
    var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];
    tinyMCEPopup.restoreSelection();
    el = ed.selection.getNode();
    tdElm = ed.dom.getParent(el, "td,th");
    trElm = ed.dom.getParent(el, "tr");
    tableElm = ed.dom.getParent(el, "table");
    var inst = tinyMCE.selectedInstance;
    var tdElm = tinyMCE.getParentElement(inst.getFocusElement(), "td,th");
    var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");
    var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
    var formObj = document.forms[0];
    inst.execCommand('mceBeginUndoLevel');
    ed.execCommand('mceBeginUndoLevel');
    switch (getSelectValue(formObj, 'action')) {
        case "cell":
            var celltype = getSelectValue(formObj, 'celltype');
            var scope = getSelectValue(formObj, 'scope');
            if (tinyMCE.getParam("accessibility_warnings")) {
            if (ed.getParam("accessibility_warnings")) {
                if (celltype == "th" && scope == "")
                    var answer = confirm(tinyMCE.getLang('lang_table_missing_scope', '', true));
                    var answer = confirm(ed.getLang('table_dlg.missing_scope', '', true));
                else
                    var answer = true;
@@ -108,8 +115,8 @@
            break;
    }
    tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
    tinyMCE.triggerNodeChange();
    ed.addVisual();
    ed.nodeChanged();
    inst.execCommand('mceEndUndoLevel');
    tinyMCEPopup.close();
}
@@ -124,11 +131,12 @@
}
function updateCell(td, skip_id) {
    var inst = tinyMCE.selectedInstance;
    var inst = ed;
    var formObj = document.forms[0];
    var curCellType = td.nodeName.toLowerCase();
    var celltype = getSelectValue(formObj, 'celltype');
    var doc = inst.getDoc();
    var dom = ed.dom;
    if (!skip_id)
        td.setAttribute('id', formObj.id.value);
@@ -137,16 +145,16 @@
    td.setAttribute('vAlign', formObj.valign.value);
    td.setAttribute('lang', formObj.lang.value);
    td.setAttribute('dir', getSelectValue(formObj, 'dir'));
    td.setAttribute('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(formObj.style.value)));
    td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));
    td.setAttribute('scope', formObj.scope.value);
    tinyMCE.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
    ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));
    // Clear deprecated attributes
    tinyMCE.setAttrib(td, 'width', '');
    tinyMCE.setAttrib(td, 'height', '');
    tinyMCE.setAttrib(td, 'bgColor', '');
    tinyMCE.setAttrib(td, 'borderColor', '');
    tinyMCE.setAttrib(td, 'background', '');
    ed.dom.setAttrib(td, 'width', '');
    ed.dom.setAttrib(td, 'height', '');
    ed.dom.setAttrib(td, 'bgColor', '');
    ed.dom.setAttrib(td, 'borderColor', '');
    ed.dom.setAttrib(td, 'background', '');
    // Set styles
    td.style.width = getCSSSize(formObj.width.value);
@@ -172,30 +180,30 @@
        for (var c=0; c<td.childNodes.length; c++)
            newCell.appendChild(td.childNodes[c].cloneNode(1));
        for (var a=0; a<td.attributes.length; a++) {
            var attr = td.attributes[a];
            newCell.setAttribute(attr.name, attr.value);
        }
        for (var a=0; a<td.attributes.length; a++)
            ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));
        td.parentNode.replaceChild(newCell, td);
        td = newCell;
    }
    dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));
    return td;
}
function changedBackgroundImage() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = ed.dom.parseStyle(formObj.style.value);
    st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = ed.dom.serializeStyle(st);
}
function changedSize() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = ed.dom.parseStyle(formObj.style.value);
    var width = formObj.width.value;
    if (width != "")
@@ -209,22 +217,22 @@
    else
        st['height'] = "";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = ed.dom.serializeStyle(st);
}
function changedColor() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = ed.dom.parseStyle(formObj.style.value);
    st['background-color'] = formObj.bgcolor.value;
    st['border-color'] = formObj.bordercolor.value;
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = ed.dom.serializeStyle(st);
}
function changedStyle() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = ed.dom.parseStyle(formObj.style.value);
    if (st['background-image'])
        formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
@@ -247,3 +255,5 @@
        updateColor('bordercolor_pick','bordercolor');
    }
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/table/js/merge_cells.js
New file
@@ -0,0 +1,29 @@
tinyMCEPopup.requireLangPack();
function init() {
    var f = document.forms[0], v;
    tinyMCEPopup.resizeToInnerSize();
    f.numcols.value = tinyMCEPopup.getWindowArg('numcols', 1);
    f.numrows.value = tinyMCEPopup.getWindowArg('numcols', 1);
}
function mergeCells() {
    var args = [], f = document.forms[0];
    tinyMCEPopup.restoreSelection();
    if (!AutoValidator.validate(f)) {
        alert(tinyMCEPopup.getLang('invalid_data'));
        return false;
    }
    args["numcols"] = f.numcols.value;
    args["numrows"] = f.numrows.value;
    tinyMCEPopup.execCommand("mceTableMergeCells", false, args);
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/table/js/row.js
File was renamed from program/js/tiny_mce/plugins/table/jscripts/row.js
@@ -1,37 +1,42 @@
tinyMCEPopup.requireLangPack();
function init() {
    tinyMCEPopup.resizeToInnerSize();
    document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');
    document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
    var inst = tinyMCE.selectedInstance;
    var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");
    var inst = tinyMCEPopup.editor;
    var dom = inst.dom;
    var trElm = dom.getParent(inst.selection.getNode(), "tr");
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(tinyMCE.getAttrib(trElm, "style"));
    var st = dom.parseStyle(dom.getAttrib(trElm, "style"));
    // Get table row data
    var rowtype = trElm.parentNode.nodeName.toLowerCase();
    var align = tinyMCE.getAttrib(trElm, 'align');
    var valign = tinyMCE.getAttrib(trElm, 'valign');
    var align = dom.getAttrib(trElm, 'align');
    var valign = dom.getAttrib(trElm, 'valign');
    var height = trimSize(getStyle(trElm, 'height', 'height'));
    var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(trElm, 'class'), false);
    var className = dom.getAttrib(trElm, 'class');
    var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));
    var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");;
    var id = tinyMCE.getAttrib(trElm, 'id');
    var lang = tinyMCE.getAttrib(trElm, 'lang');
    var dir = tinyMCE.getAttrib(trElm, 'dir');
    var id = dom.getAttrib(trElm, 'id');
    var lang = dom.getAttrib(trElm, 'lang');
    var dir = dom.getAttrib(trElm, 'dir');
    // Setup form
    addClassesToList('class', 'table_row_styles');
    TinyMCE_EditableSelects.init();
    formObj.bgcolor.value = bgcolor;
    formObj.backgroundimage.value = backgroundimage;
    formObj.height.value = height;
    formObj.id.value = id;
    formObj.lang.value = lang;
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
    selectByValue(formObj, 'align', align);
    selectByValue(formObj, 'valign', valign);
    selectByValue(formObj, 'class', className);
    selectByValue(formObj, 'class', className, true, true);
    selectByValue(formObj, 'rowtype', rowtype);
    selectByValue(formObj, 'dir', dir);
@@ -43,13 +48,12 @@
}
function updateAction() {
    tinyMCEPopup.restoreSelection();
    var inst = tinyMCE.selectedInstance;
    var trElm = tinyMCE.getParentElement(inst.getFocusElement(), "tr");
    var tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
    var formObj = document.forms[0];
    var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];
    var action = getSelectValue(formObj, 'action');
    tinyMCEPopup.restoreSelection();
    trElm = dom.getParent(inst.selection.getNode(), "tr");
    tableElm = dom.getParent(inst.selection.getNode(), "table");
    inst.execCommand('mceBeginUndoLevel');
@@ -78,15 +82,16 @@
            break;
    }
    tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
    tinyMCE.triggerNodeChange();
    inst.addVisual();
    inst.nodeChanged();
    inst.execCommand('mceEndUndoLevel');
    tinyMCEPopup.close();
}
function updateRow(tr_elm, skip_id, skip_parent) {
    var inst = tinyMCE.selectedInstance;
    var inst = tinyMCEPopup.editor;
    var formObj = document.forms[0];
    var dom = inst.dom;
    var curRowType = tr_elm.parentNode.nodeName.toLowerCase();
    var rowtype = getSelectValue(formObj, 'rowtype');
    var doc = inst.getDoc();
@@ -99,8 +104,8 @@
    tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));
    tr_elm.setAttribute('lang', formObj.lang.value);
    tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));
    tr_elm.setAttribute('style', tinyMCE.serializeStyle(tinyMCE.parseStyle(formObj.style.value)));
    tinyMCE.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
    tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));
    dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));
    // Clear deprecated attributes
    tr_elm.setAttribute('background', '');
@@ -122,7 +127,7 @@
        var newRow = tr_elm.cloneNode(1);
        // next, find the parent of its new destination (creating it if necessary)
        var theTable = tinyMCE.getParentElement(tr_elm, "table");
        var theTable = dom.getParent(tr_elm, "table");
        var dest = rowtype;
        var newParent = null;
        for (var i = 0; i < theTable.childNodes.length; i++) {
@@ -133,9 +138,12 @@
        if (newParent == null) {
            newParent = doc.createElement(dest);
            if (dest == "thead")
                theTable.insertBefore(newParent, theTable.firstChild);
            if (dest == "thead") {
                if (theTable.firstChild.nodeName == 'CAPTION')
                    inst.dom.insertAfter(newParent, theTable.firstChild);
            else
                    theTable.insertBefore(newParent, theTable.firstChild);
            } else
                theTable.appendChild(newParent);
        }
@@ -148,20 +156,22 @@
        // set tr_elm to the new node
        tr_elm = newRow;
    }
    dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));
}
function changedBackgroundImage() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
    var st = dom.parseStyle(formObj.style.value);
    st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
function changedStyle() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
    var st = dom.parseStyle(formObj.style.value);
    if (st['background-image'])
        formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
@@ -178,8 +188,8 @@
}
function changedSize() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
    var st = dom.parseStyle(formObj.style.value);
    var height = formObj.height.value;
    if (height != "")
@@ -187,14 +197,16 @@
    else
        st['height'] = "";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
function changedColor() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
    var st = dom.parseStyle(formObj.style.value);
    st['background-color'] = formObj.bgcolor.value;
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/table/js/table.js
File was renamed from program/js/tiny_mce/plugins/table/jscripts/table.js
@@ -1,19 +1,22 @@
var action, orgTableWidth, orgTableHeight;
tinyMCEPopup.requireLangPack();
var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;
function insertTable() {
    var formObj = document.forms[0];
    var inst = tinyMCE.selectedInstance;
    var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption;
    var html = '', capEl;
    var elm = tinyMCE.tableElm;
    var inst = tinyMCEPopup.editor, dom = inst.dom;
    var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;
    var html = '', capEl, elm;
    var cellLimit, rowLimit, colLimit;
    tinyMCEPopup.restoreSelection();
    if (!AutoValidator.validate(formObj)) {
        alert(tinyMCE.getLang('lang_invalid_data'));
        alert(inst.getLang('invalid_data'));
        return false;
    }
    tinyMCEPopup.restoreSelection();
    elm = dom.getParent(inst.selection.getNode(), 'table');
    // Get form data
    cols = formObj.elements['cols'].value;
@@ -22,6 +25,8 @@
    cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
    cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
    align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value;
    frame = formObj.elements['frame'].options[formObj.elements['frame'].selectedIndex].value;
    rules = formObj.elements['rules'].options[formObj.elements['rules'].selectedIndex].value;
    width = formObj.elements['width'].value;
    height = formObj.elements['height'].value;
    bordercolor = formObj.elements['bordercolor'].value;
@@ -35,19 +40,19 @@
    background = formObj.elements['backgroundimage'].value;
    caption = formObj.elements['caption'].checked;
    cellLimit = tinyMCE.getParam('table_cell_limit', false);
    rowLimit = tinyMCE.getParam('table_row_limit', false);
    colLimit = tinyMCE.getParam('table_col_limit', false);
    cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);
    rowLimit = tinyMCEPopup.getParam('table_row_limit', false);
    colLimit = tinyMCEPopup.getParam('table_col_limit', false);
    // Validate table size
    if (colLimit && cols > colLimit) {
        alert(tinyMCE.getLang('lang_table_col_limit', '', true, {cols : colLimit}));
        alert(inst.getLang('table_col_limit', '', true, {cols : colLimit}));
        return false;
    } else if (rowLimit && rows > rowLimit) {
        alert(tinyMCE.getLang('lang_table_row_limit', '', true, {rows : rowLimit}));
        alert(inst.getLang('table_row_limit', '', true, {rows : rowLimit}));
        return false;
    } else if (cellLimit && cols * rows > cellLimit) {
        alert(tinyMCE.getLang('lang_table_cell_limit', '', true, {cells : cellLimit}));
        alert(inst.getLang('table_cell_limit', '', true, {cells : cellLimit}));
        return false;
    }
@@ -55,50 +60,60 @@
    if (action == "update") {
        inst.execCommand('mceBeginUndoLevel');
        tinyMCE.setAttrib(elm, 'cellPadding', cellpadding, true);
        tinyMCE.setAttrib(elm, 'cellSpacing', cellspacing, true);
        tinyMCE.setAttrib(elm, 'border', border, true);
        tinyMCE.setAttrib(elm, 'align', align);
        tinyMCE.setAttrib(elm, 'class', className);
        tinyMCE.setAttrib(elm, 'style', style);
        tinyMCE.setAttrib(elm, 'id', id);
        tinyMCE.setAttrib(elm, 'summary', summary);
        tinyMCE.setAttrib(elm, 'dir', dir);
        tinyMCE.setAttrib(elm, 'lang', lang);
        dom.setAttrib(elm, 'cellPadding', cellpadding, true);
        dom.setAttrib(elm, 'cellSpacing', cellspacing, true);
        dom.setAttrib(elm, 'border', border);
        dom.setAttrib(elm, 'align', align);
        dom.setAttrib(elm, 'frame', frame);
        dom.setAttrib(elm, 'rules', rules);
        dom.setAttrib(elm, 'class', className);
        dom.setAttrib(elm, 'style', style);
        dom.setAttrib(elm, 'id', id);
        dom.setAttrib(elm, 'summary', summary);
        dom.setAttrib(elm, 'dir', dir);
        dom.setAttrib(elm, 'lang', lang);
        capEl = elm.getElementsByTagName('caption')[0];
        capEl = inst.dom.select('caption', elm)[0];
        if (capEl && !caption)
            capEl.parentNode.removeChild(capEl);
        if (!capEl && caption) {
            capEl = elm.ownerDocument.createElement('caption');
            capEl.innerHTML = '&nbsp;';
            if (!tinymce.isIE)
                capEl.innerHTML = '<br mce_bogus="1"/>';
            elm.insertBefore(capEl, elm.firstChild);
        }
        // Not inline styles
        if (!tinyMCE.getParam("inline_styles"))
            tinyMCE.setAttrib(elm, 'width', width, true);
        if (width && /(pt|em|cm)$/.test(width)) {
            dom.setStyle(elm, 'width', width);
            dom.setAttrib(elm, 'width', '');
        } else {
            dom.setAttrib(elm, 'width', width, true);
            dom.setStyle(elm, 'width', '');
        }
        // Remove these since they are not valid XHTML
        tinyMCE.setAttrib(elm, 'borderColor', '');
        tinyMCE.setAttrib(elm, 'bgColor', '');
        tinyMCE.setAttrib(elm, 'background', '');
        tinyMCE.setAttrib(elm, 'height', '');
        dom.setAttrib(elm, 'borderColor', '');
        dom.setAttrib(elm, 'bgColor', '');
        dom.setAttrib(elm, 'background', '');
        if (height) {
            dom.setStyle(elm, 'height', height);
            dom.setAttrib(elm, 'height', '');
        }
        if (background != '')
            elm.style.backgroundImage = "url('" + background + "')";
        else
            elm.style.backgroundImage = '';
        if (tinyMCE.getParam("inline_styles"))
            elm.style.borderWidth = border + "px";
        if (tinyMCE.getParam("inline_styles")) {
/*        if (tinyMCEPopup.getParam("inline_styles")) {
            if (width != '')
                elm.style.width = getCSSSize(width);
        }
        }*/
        if (bordercolor != "") {
            elm.style.borderColor = bordercolor;
@@ -110,18 +125,17 @@
        elm.style.backgroundColor = bgcolor;
        elm.style.height = getCSSSize(height);
        tinyMCE.handleVisualAid(tinyMCE.tableElm, false, inst.visualAid, inst);
        inst.addVisual();
        // Fix for stange MSIE align bug
        tinyMCE.tableElm.outerHTML = tinyMCE.tableElm.outerHTML;
        //elm.outerHTML = elm.outerHTML;
        tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst);
        tinyMCE.triggerNodeChange();
        inst.nodeChanged();
        inst.execCommand('mceEndUndoLevel');
        // Repaint if dimensions changed
        if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)
            inst.repaint();
            inst.execCommand('mceRepaint');
        tinyMCEPopup.close();
        return true;
@@ -134,26 +148,51 @@
    html += makeAttrib('border', border);
    html += makeAttrib('cellpadding', cellpadding);
    html += makeAttrib('cellspacing', cellspacing);
    if (width && /(pt|em|cm)$/.test(width)) {
        if (style)
            style += '; ';
        style += 'width: ' + width;
    } else
    html += makeAttrib('width', width);
/*    if (height) {
        if (style)
            style += '; ';
        style += 'height: ' + height;
    }*/
    //html += makeAttrib('height', height);
    //html += makeAttrib('bordercolor', bordercolor);
    //html += makeAttrib('bgcolor', bgcolor);
    html += makeAttrib('align', align);
    html += makeAttrib('class', tinyMCE.getVisualAidClass(className, border == 0));
    html += makeAttrib('frame', frame);
    html += makeAttrib('rules', rules);
    html += makeAttrib('class', className);
    html += makeAttrib('style', style);
    html += makeAttrib('summary', summary);
    html += makeAttrib('dir', dir);
    html += makeAttrib('lang', lang);
    html += '>';
    if (caption)
        html += '<caption>&nbsp;</caption>';
    if (caption) {
        if (!tinymce.isIE)
            html += '<caption><br mce_bogus="1"/></caption>';
        else
            html += '<caption></caption>';
    }
    for (var y=0; y<rows; y++) {
        html += "<tr>";
        for (var x=0; x<cols; x++)
            html += '<td>&nbsp;</td>';
        for (var x=0; x<cols; x++) {
            if (!tinymce.isIE)
                html += '<td><br mce_bogus="1"/></td>';
            else
                html += '<td></td>';
        }
        html += "</tr>";
    }
@@ -162,7 +201,7 @@
    inst.execCommand('mceBeginUndoLevel');
    inst.execCommand('mceInsertContent', false, html);
    tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual']);
    inst.addVisual();
    inst.execCommand('mceEndUndoLevel');
    tinyMCEPopup.close();
@@ -199,20 +238,20 @@
    document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');
    document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');
    var cols = 2, rows = 2, border = tinyMCE.getParam('table_default_border', '0'), cellpadding = tinyMCE.getParam('table_default_cellpadding', ''), cellspacing = tinyMCE.getParam('table_default_cellspacing', '');
    var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');
    var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";
    var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "";
    var inst = tinyMCE.selectedInstance;
    var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;
    var inst = tinyMCEPopup.editor, dom = inst.dom;
    var formObj = document.forms[0];
    var elm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
    var elm = dom.getParent(inst.selection.getNode(), "table");
    tinyMCE.tableElm = elm;
    action = tinyMCE.getWindowArg('action');
    if (action == null)
        action = tinyMCE.tableElm ? "update" : "insert";
    action = tinyMCEPopup.getWindowArg('action');
    if (tinyMCE.tableElm && action != "insert") {
        var rowsAr = tinyMCE.tableElm.rows;
    if (!action)
        action = elm ? "update" : "insert";
    if (elm && action != "insert") {
        var rowsAr = elm.rows;
        var cols = 0;
        for (var i=0; i<rowsAr.length; i++)
            if (rowsAr[i].cells.length > cols)
@@ -221,35 +260,41 @@
        cols = cols;
        rows = rowsAr.length;
        st = tinyMCE.parseStyle(tinyMCE.getAttrib(tinyMCE.tableElm, "style"));
        st = dom.parseStyle(dom.getAttrib(elm, "style"));
        border = trimSize(getStyle(elm, 'border', 'borderWidth'));
        cellpadding = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellpadding', "");
        cellspacing = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellspacing', "");
        cellpadding = dom.getAttrib(elm, 'cellpadding', "");
        cellspacing = dom.getAttrib(elm, 'cellspacing', "");
        width = trimSize(getStyle(elm, 'width', 'width'));
        height = trimSize(getStyle(elm, 'height', 'height'));
        bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));
        bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));
        align = tinyMCE.getAttrib(tinyMCE.tableElm, 'align', align);
        className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm, 'class'), false);
        id = tinyMCE.getAttrib(tinyMCE.tableElm, 'id');
        summary = tinyMCE.getAttrib(tinyMCE.tableElm, 'summary');
        style = tinyMCE.serializeStyle(st);
        dir = tinyMCE.getAttrib(tinyMCE.tableElm, 'dir');
        lang = tinyMCE.getAttrib(tinyMCE.tableElm, 'lang');
        align = dom.getAttrib(elm, 'align', align);
        frame = dom.getAttrib(elm, 'frame');
        rules = dom.getAttrib(elm, 'rules');
        className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));
        id = dom.getAttrib(elm, 'id');
        summary = dom.getAttrib(elm, 'summary');
        style = dom.serializeStyle(st);
        dir = dom.getAttrib(elm, 'dir');
        lang = dom.getAttrib(elm, 'lang');
        background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
        formObj.caption.checked = tinyMCE.tableElm.getElementsByTagName('caption').length > 0;
        formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;
        orgTableWidth = width;
        orgTableHeight = height;
        action = "update";
        formObj.insert.value = inst.getLang('update');
    }
    addClassesToList('class', "table_styles");
    TinyMCE_EditableSelects.init();
    // Update form
    selectByValue(formObj, 'align', align);
    selectByValue(formObj, 'class', className);
    selectByValue(formObj, 'frame', frame);
    selectByValue(formObj, 'rules', rules);
    selectByValue(formObj, 'class', className, true, true);
    formObj.cols.value = cols;
    formObj.rows.value = rows;
    formObj.border.value = border;
@@ -265,7 +310,6 @@
    formObj.dir.value = dir;
    formObj.lang.value = lang;
    formObj.backgroundimage.value = background;
    formObj.insert.value = tinyMCE.getLang('lang_' + action, 'Insert', true);
    updateColor('bordercolor_pick', 'bordercolor');
    updateColor('bgcolor_pick', 'bgcolor');
@@ -283,13 +327,13 @@
function changedSize() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = dom.parseStyle(formObj.style.value);
    var width = formObj.width.value;
/*    var width = formObj.width.value;
    if (width != "")
        st['width'] = tinyMCE.getParam("inline_styles") ? getCSSSize(width) : "";
        st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";
    else
        st['width'] = "";
        st['width'] = "";*/
    var height = formObj.height.value;
    if (height != "")
@@ -297,32 +341,32 @@
    else
        st['height'] = "";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
function changedBackgroundImage() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = dom.parseStyle(formObj.style.value);
    st['background-image'] = "url('" + formObj.backgroundimage.value + "')";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
function changedBorder() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = dom.parseStyle(formObj.style.value);
    // Update border width if the element has a color
    if (formObj.border.value != "" && formObj.bordercolor.value != "")
        st['border-width'] = formObj.border.value + "px";
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
function changedColor() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = dom.parseStyle(formObj.style.value);
    st['background-color'] = formObj.bgcolor.value;
@@ -334,12 +378,12 @@
            st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";
    }
    formObj.style.value = tinyMCE.serializeStyle(st);
    formObj.style.value = dom.serializeStyle(st);
}
function changedStyle() {
    var formObj = document.forms[0];
    var st = tinyMCE.parseStyle(formObj.style.value);
    var st = dom.parseStyle(formObj.style.value);
    if (st['background-image'])
        formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");
@@ -362,3 +406,5 @@
        updateColor('bordercolor_pick','bordercolor');
    }
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/table/jscripts/merge_cells.js
File was deleted
program/js/tiny_mce/plugins/table/langs/en.js
File was deleted
program/js/tiny_mce/plugins/table/langs/en_dlg.js
New file
@@ -0,0 +1,74 @@
tinyMCE.addI18n('en.table_dlg',{
general_tab:"General",
advanced_tab:"Advanced",
general_props:"General properties",
advanced_props:"Advanced properties",
rowtype:"Row in table part",
title:"Insert/Modify table",
width:"Width",
height:"Height",
cols:"Cols",
rows:"Rows",
cellspacing:"Cellspacing",
cellpadding:"Cellpadding",
border:"Border",
align:"Alignment",
align_default:"Default",
align_left:"Left",
align_right:"Right",
align_middle:"Center",
row_title:"Table row properties",
cell_title:"Table cell properties",
cell_type:"Cell type",
valign:"Vertical alignment",
align_top:"Top",
align_bottom:"Bottom",
bordercolor:"Border color",
bgcolor:"Background color",
merge_cells_title:"Merge table cells",
id:"Id",
style:"Style",
langdir:"Language direction",
langcode:"Language code",
mime:"Target MIME type",
ltr:"Left to right",
rtl:"Right to left",
bgimage:"Background image",
summary:"Summary",
td:"Data",
th:"Header",
cell_cell:"Update current cell",
cell_row:"Update all cells in row",
cell_all:"Update all cells in table",
row_row:"Update current row",
row_odd:"Update odd rows in table",
row_even:"Update even rows in table",
row_all:"Update all rows in table",
thead:"Table Head",
tbody:"Table Body",
tfoot:"Table Foot",
scope:"Scope",
rowgroup:"Row Group",
colgroup:"Col Group",
col_limit:"You've exceeded the maximum number of columns of {$cols}.",
row_limit:"You've exceeded the maximum number of rows of {$rows}.",
cell_limit:"You've exceeded the maximum number of cells of {$cells}.",
missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",
caption:"Table caption",
frame:"Frame",
frame_none:"none",
frame_groups:"groups",
frame_rows:"rows",
frame_cols:"cols",
frame_all:"all",
rules:"Rules",
rules_void:"void",
rules_above:"above",
rules_below:"below",
rules_hsides:"hsides",
rules_lhs:"lhs",
rules_rhs:"rhs",
rules_vsides:"vsides",
rules_box:"box",
rules_border:"border"
});
program/js/tiny_mce/plugins/table/merge_cells.htm
@@ -1,24 +1,24 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_table_merge_cells_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/merge_cells.js"></script>
    <title>{#table_dlg.merge_cells_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/validate.js"></script>
    <script type="text/javascript" src="js/merge_cells.js"></script>
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="margin: 8px" style="display: none">
<form onsubmit="insertTable();return false;" action="#">
<body style="margin: 8px" style="display: none">
<form onsubmit="mergeCells();return false;" action="#">
    <fieldset>
        <legend>{$lang_table_merge_cells_title}</legend>
        <legend>{#table_dlg.merge_cells_title}</legend>
          <table border="0" cellpadding="0" cellspacing="3" width="100%">
              <tr>
                <td>{$lang_table_cols}:</td>
                <td align="right"><input type="text" name="numcols" value="" class="number min1" style="width: 30px" /></td>
                <td>
                <td>{#table_dlg.cols}:</td>
                <td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>
              </tr>
              <tr>
                <td>{$lang_table_rows}:</td>
                <td>{#table_dlg.rows}:</td>
                <td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>
              </tr>
          </table>
@@ -26,11 +26,11 @@
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_update}" onclick="mergeCells();" />
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
program/js/tiny_mce/plugins/table/readme.txt
File was deleted
program/js/tiny_mce/plugins/table/row.htm
@@ -1,74 +1,76 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_table_row_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/row.js"></script>
    <title>{#table_dlg.row_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/row.js"></script>
    <link href="css/row.css" rel="stylesheet" type="text/css" />
    <base target="_self" />
</head>
<body id="tablerow" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body id="tablerow" style="display: none">
    <form onsubmit="updateAction();return false;">
        <div class="tabs">
            <ul>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
            </ul>
        </div>
        <div class="panel_wrapper">
            <div id="general_panel" class="panel current">
                <fieldset>
                    <legend>{$lang_table_general_props}</legend>
                    <legend>{#table_dlg.general_props}</legend>
                    <table border="0" cellpadding="4" cellspacing="0">
                        <tr>
                            <td><label for="rowtype">{$lang_table_rowtype}</label></td>
                            <td><label for="rowtype">{#table_dlg.rowtype}</label></td>
                            <td class="col2">
                                <select id="rowtype" name="rowtype">
                                    <option value="thead">{$lang_table_thead}</option>
                                    <option value="tbody">{$lang_table_tbody}</option>
                                    <option value="tfoot">{$lang_table_tfoot}</option>
                                <select id="rowtype" name="rowtype" class="mceFocus">
                                    <option value="thead">{#table_dlg.thead}</option>
                                    <option value="tbody">{#table_dlg.tbody}</option>
                                    <option value="tfoot">{#table_dlg.tfoot}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="align">{$lang_table_align}</label></td>
                            <td><label for="align">{#table_dlg.align}</label></td>
                            <td class="col2">
                                <select id="align" name="align">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="center">{$lang_table_align_middle}</option>
                                    <option value="left">{$lang_table_align_left}</option>
                                    <option value="right">{$lang_table_align_right}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="center">{#table_dlg.align_middle}</option>
                                    <option value="left">{#table_dlg.align_left}</option>
                                    <option value="right">{#table_dlg.align_right}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="valign">{$lang_table_valign}</label></td>
                            <td><label for="valign">{#table_dlg.valign}</label></td>
                            <td class="col2">
                                <select id="valign" name="valign">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="top">{$lang_table_align_top}</option>
                                    <option value="middle">{$lang_table_align_middle}</option>
                                    <option value="bottom">{$lang_table_align_bottom}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="top">{#table_dlg.align_top}</option>
                                    <option value="middle">{#table_dlg.align_middle}</option>
                                    <option value="bottom">{#table_dlg.align_bottom}</option>
                                </select>
                            </td>
                        </tr>
                        <tr id="styleSelectRow">
                            <td><label for="class">{$lang_class_name}</label></td>
                            <td><label for="class">{#class_name}</label></td>
                            <td class="col2">
                                <select id="class" name="class">
                                    <option value="" selected="selected">{$lang_not_set}</option>
                                <select id="class" name="class" class="mceEditableSelect">
                                    <option value="" selected="selected">{#not_set}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td><label for="height">{$lang_table_height}</label></td>
                            <td><label for="height">{#table_dlg.height}</label></td>
                            <td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>
                        </tr>
                    </table>
@@ -77,39 +79,39 @@
            <div id="advanced_panel" class="panel">
                <fieldset>
                    <legend>{$lang_table_advanced_props}</legend>
                    <legend>{#table_dlg.advanced_props}</legend>
                    <table border="0" cellpadding="0" cellspacing="4">
                        <tr>
                            <td class="column1"><label for="id">{$lang_table_id}</label></td>
                            <td class="column1"><label for="id">{#table_dlg.id}</label></td>
                            <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> 
                        </tr>
                        <tr>
                            <td><label for="style">{$lang_table_style}</label></td>
                            <td><label for="style">{#table_dlg.style}</label></td>
                            <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>
                        </tr>
                        <tr>
                            <td class="column1"><label for="dir">{$lang_table_langdir}</label></td>
                            <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
                            <td>
                                <select id="dir" name="dir" style="width: 200px"> 
                                        <option value="">{$lang_not_set}</option>
                                        <option value="ltr">{$lang_table_ltr}</option>
                                        <option value="rtl">{$lang_table_rtl}</option>
                                        <option value="">{#not_set}</option>
                                        <option value="ltr">{#table_dlg.ltr}</option>
                                        <option value="rtl">{#table_dlg.rtl}</option>
                                </select>
                            </td> 
                        </tr>
                        <tr>
                            <td class="column1"><label for="lang">{$lang_table_langcode}</label></td>
                            <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td>
                            <td>
                                <input id="lang" name="lang" type="text" value="" style="width: 200px" />
                            </td> 
                        </tr>
                        <tr>
                            <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td>
                            <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -121,7 +123,7 @@
                        </tr>
                        <tr>
                            <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td>
                            <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -139,19 +141,19 @@
        <div class="mceActionPanel">
            <div>
                <select id="action" name="action">
                    <option value="row">{$lang_table_row_row}</option>
                    <option value="odd">{$lang_table_row_odd}</option>
                    <option value="even">{$lang_table_row_even}</option>
                    <option value="all">{$lang_table_row_all}</option>
                    <option value="row">{#table_dlg.row_row}</option>
                    <option value="odd">{#table_dlg.row_odd}</option>
                    <option value="even">{#table_dlg.row_even}</option>
                    <option value="all">{#table_dlg.row_all}</option>
                </select>
            </div>
            <div style="float: left">
                <div><input type="button" id="insert" name="insert" value="{$lang_update}" onclick="updateAction();" /></div>
                <div><input type="submit" id="insert" name="insert" value="{#update}" /></div>
            </div>
            <div style="float: right">
                <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
                <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
            </div>
        </div>
    </form>
program/js/tiny_mce/plugins/table/table.htm
@@ -1,67 +1,68 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_table_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/table.js"></script>
    <title>{#table_dlg.title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/validate.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/table.js"></script>
    <link href="css/table.css" rel="stylesheet" type="text/css" />
    <base target="_self" />
</head>
<body id="table" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body id="table" style="display: none">
    <form onsubmit="insertTable();return false;" action="#">
        <div class="tabs">
            <ul>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_table_general_tab}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{$lang_table_advanced_tab}</a></span></li>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>
                <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>
            </ul>
        </div>
        <div class="panel_wrapper">
            <div id="general_panel" class="panel current">
                <fieldset>
                    <legend>{$lang_table_general_props}</legend>
                    <legend>{#table_dlg.general_props}</legend>
                      <table border="0" cellpadding="4" cellspacing="0" width="100%">
                              <tr>
                                <td><label id="colslabel" for="cols">{$lang_table_cols}</label></td>
                                <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
                                <td><label id="rowslabel" for="rows">{$lang_table_rows}</label></td>
                                <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>
                                <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>
                                <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>
                                <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>
                              </tr>
                              <tr>
                                <td><label id="cellpaddinglabel" for="cellpadding">{$lang_table_cellpadding}</label></td>
                                <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>
                                <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>
                                <td><label id="cellspacinglabel" for="cellspacing">{$lang_table_cellspacing}</label></td>
                                <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>
                                <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>
                              </tr>
                              <tr>
                                <td><label id="alignlabel" for="align">{$lang_table_align}</label></td>
                                <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>
                                <td><select id="align" name="align">
                                    <option value="">{$lang_not_set}</option>
                                    <option value="center">{$lang_table_align_middle}</option>
                                    <option value="left">{$lang_table_align_left}</option>
                                    <option value="right">{$lang_table_align_right}</option>
                                    <option value="">{#not_set}</option>
                                    <option value="center">{#table_dlg.align_middle}</option>
                                    <option value="left">{#table_dlg.align_left}</option>
                                    <option value="right">{#table_dlg.align_right}</option>
                                  </select></td>
                                <td><label id="borderlabel" for="border">{$lang_table_border}</label></td>
                                <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>
                                <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>
                              </tr>
                              <tr id="width_row">
                                <td><label id="widthlabel" for="width">{$lang_table_width}</label></td>
                                <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>
                                <td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
                                <td><label id="heightlabel" for="height">{$lang_table_height}</label></td>
                                <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>
                                <td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>
                              </tr>
                              <tr id="styleSelectRow">
                                <td><label id="classlabel" for="class">{$lang_class_name}</label></td>
                                <td><label id="classlabel" for="class">{#class_name}</label></td>
                                <td colspan="3">
                                 <select id="class" name="class">
                                    <option value="" selected>{$lang_not_set}</option>
                                 <select id="class" name="class" class="mceEditableSelect">
                                    <option value="" selected>{#not_set}</option>
                                 </select></td>
                              </tr>
                              <tr>
                                <td class="column1"><label for="caption">{$lang_table_caption}</label></td>
                                <td class="column1"><label for="caption">{#table_dlg.caption}</label></td>
                                <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> 
                              </tr>
                            </table>
@@ -70,44 +71,33 @@
            <div id="advanced_panel" class="panel">
                <fieldset>
                    <legend>{$lang_table_advanced_props}</legend>
                    <legend>{#table_dlg.advanced_props}</legend>
                    <table border="0" cellpadding="0" cellspacing="4">
                        <tr>
                            <td class="column1"><label for="id">{$lang_table_id}</label></td>
                            <td class="column1"><label for="id">{#table_dlg.id}</label></td>
                            <td><input id="id" name="id" type="text" value="" class="advfield" /></td> 
                        </tr>
                        <tr>
                            <td class="column1"><label for="summary">{$lang_table_summary}</label></td>
                            <td class="column1"><label for="summary">{#table_dlg.summary}</label></td>
                            <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td> 
                        </tr>
                        <tr>
                            <td><label for="style">{$lang_table_style}</label></td>
                            <td><label for="style">{#table_dlg.style}</label></td>
                            <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>
                        </tr>
                        <tr>
                            <td class="column1"><label for="dir">{$lang_table_langdir}</label></td>
                            <td>
                                <select id="dir" name="dir" class="advfield">
                                        <option value="">{$lang_not_set}</option>
                                        <option value="ltr">{$lang_table_ltr}</option>
                                        <option value="rtl">{$lang_table_rtl}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="column1"><label id="langlabel" for="lang">{$lang_table_langcode}</label></td>
                            <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td>
                            <td>
                                <input id="lang" name="lang" type="text" value="" class="advfield" />
                            </td> 
                        </tr>
                        <tr>
                            <td class="column1"><label for="backgroundimage">{$lang_table_bgimage}</label></td>
                            <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -119,7 +109,50 @@
                        </tr>
                        <tr>
                            <td class="column1"><label for="bordercolor">{$lang_table_bordercolor}</label></td>
                            <td class="column1"><label for="frame">{#table_dlg.frame}</label></td>
                            <td>
                                <select id="frame" name="frame" class="advfield">
                                        <option value="">{#not_set}</option>
                                        <option value="none">{#table_dlg.frame_none}</option>
                                        <option value="groups">{#table_dlg.frame_groups}</option>
                                        <option value="rows">{#table_dlg.frame_rows}</option>
                                        <option value="cols">{#table_dlg.frame_cols}</option>
                                        <option value="all">{#table_dlg.frame_all}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="column1"><label for="rules">{#table_dlg.rules}</label></td>
                            <td>
                                <select id="rules" name="rules" class="advfield">
                                        <option value="">{#not_set}</option>
                                        <option value="void">{#table_dlg.rules_void}</option>
                                        <option value="above">{#table_dlg.rules_above}</option>
                                        <option value="below">{#table_dlg.rules_below}</option>
                                        <option value="hsides">{#table_dlg.rules_hsides}</option>
                                        <option value="lhs">{#table_dlg.rules_lhs}</option>
                                        <option value="rhs">{#table_dlg.rules_rhs}</option>
                                        <option value="vsides">{#table_dlg.rules_vsides}</option>
                                        <option value="box">{#table_dlg.rules_box}</option>
                                        <option value="border">{#table_dlg.rules_border}</option>
                                    </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td>
                            <td>
                                <select id="dir" name="dir" class="advfield">
                                        <option value="">{#not_set}</option>
                                        <option value="ltr">{#table_dlg.ltr}</option>
                                        <option value="rtl">{#table_dlg.rtl}</option>
                                </select>
                            </td>
                        </tr>
                        <tr>
                            <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -131,7 +164,7 @@
                        </tr>
                        <tr>
                            <td class="column1"><label for="bgcolor">{$lang_table_bgcolor}</label></td>
                            <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td>
                            <td>
                                <table border="0" cellpadding="0" cellspacing="0">
                                    <tr>
@@ -148,11 +181,11 @@
        <div class="mceActionPanel">
            <div style="float: left">
                <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertTable();" />
                <input type="submit" id="insert" name="insert" value="{#insert}" />
            </div>
            <div style="float: right">
                <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
                <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
            </div>
        </div>
    </form>
program/js/tiny_mce/plugins/visualchars/editor_plugin.js
@@ -1 +1 @@
tinyMCE.importPluginLanguagePack('visualchars');var TinyMCE_VisualCharsPlugin={getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion}},initInstance:function(inst){inst.visualChars={state:false}},getControlHTML:function(cn){switch(cn){case"visualchars":return tinyMCE.getButtonHTML(cn,'lang_visualchars_desc','{$pluginurl}/images/visualchars.gif','mceVisualChars',false)}return""},execCommand:function(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);switch(command){case"mceVisualChars":this._toggleVisualChars(editor_id,inst);return true}return false},cleanup:function(type,content,inst){if(type=="insert_to_editor_dom"||type=="get_from_editor_dom"){inst.visualChars.state=true;this._toggleVisualChars(inst.editorId,inst)}return content},_toggleVisualChars:function(editor_id,inst){var nl,i,h,d=inst.getDoc(),b=inst.getBody(),nv,s=inst.selection,bo;inst.visualChars.state=!inst.visualChars.state;bo=s.getBookmark(true);tinyMCE.switchClass(editor_id+'_visualchars',inst.visualChars.state?'mceButtonSelected':'mceButtonNormal');if(inst.visualChars.state){nl=tinyMCE.selectNodes(b,function(n){return n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1});for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHiddenVisualChar">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');tinyMCE.setOuterHTML(nl[i],nv,d)}}else{nl=tinyMCE.selectNodes(b,function(n){return n.nodeType==1&&n.nodeName=='SPAN'&&n.className=='mceItemHiddenVisualChar'});for(i=0;i<nl.length;i++)tinyMCE.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(&middot;|\u00b7)/g,'&nbsp;'),d)}}};tinyMCE.addPlugin("visualchars",TinyMCE_VisualCharsPlugin);
(function(){tinymce.create('tinymce.plugins.VisualChars',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceVisualChars',t._toggleVisualChars,t);ed.addButton('visualchars',{title:'visualchars.desc',cmd:'mceVisualChars'});ed.onBeforeGetContent.add(function(ed,o){if(t.state){t.state=true;t._toggleVisualChars();}});},getInfo:function(){return{longname:'Visual characters',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_toggleVisualChars:function(){var t=this,ed=t.editor,nl,i,h,d=ed.getDoc(),b=ed.getBody(),nv,s=ed.selection,bo;t.state=!t.state;ed.controlManager.setActive('visualchars',t.state);if(t.state){nl=[];tinymce.walk(b,function(n){if(n.nodeType==3&&n.nodeValue&&n.nodeValue.indexOf('\u00a0')!=-1)nl.push(n);},'childNodes');for(i=0;i<nl.length;i++){nv=nl[i].nodeValue;nv=nv.replace(/(\u00a0+)/g,'<span class="mceItemHidden mceVisualNbsp">$1</span>');nv=nv.replace(/\u00a0/g,'\u00b7');ed.dom.setOuterHTML(nl[i],nv,d);}}else{nl=tinymce.grep(ed.dom.select('span',b),function(n){return ed.dom.hasClass(n,'mceVisualNbsp');});for(i=0;i<nl.length;i++)ed.dom.setOuterHTML(nl[i],nl[i].innerHTML.replace(/(&middot;|\u00b7)/g,'&nbsp;'),d);}}});tinymce.PluginManager.add('visualchars',tinymce.plugins.VisualChars);})();
program/js/tiny_mce/plugins/visualchars/editor_plugin_src.js
@@ -1,89 +1,73 @@
/**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/* Import plugin specific language pack */
tinyMCE.importPluginLanguagePack('visualchars');
(function() {
    tinymce.create('tinymce.plugins.VisualChars', {
        init : function(ed, url) {
            var t = this;
var TinyMCE_VisualCharsPlugin = {
            t.editor = ed;
            // Register commands
            ed.addCommand('mceVisualChars', t._toggleVisualChars, t);
            // Register buttons
            ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});
            ed.onBeforeGetContent.add(function(ed, o) {
                if (t.state) {
                    t.state = true;
                    t._toggleVisualChars();
                }
            });
        },
    getInfo : function() {
        return {
            longname : 'Visual characters',
            author : 'Moxiecode Systems AB',
            authorurl : 'http://tinymce.moxiecode.com',
            infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',
            version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
                version : tinymce.majorVersion + "." + tinymce.minorVersion
        };
    },
    initInstance : function(inst) {
        inst.visualChars = {
            state : false
        };
    },
        // Private methods
    getControlHTML : function(cn) {
        switch (cn) {
            case "visualchars":
                return tinyMCE.getButtonHTML(cn, 'lang_visualchars_desc', '{$pluginurl}/images/visualchars.gif', 'mceVisualChars', false);
        }
        _toggleVisualChars : function() {
            var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo;
        return "";
    },
            t.state = !t.state;
            ed.controlManager.setActive('visualchars', t.state);
    execCommand : function(editor_id, element, command, user_interface, value) {
        var inst = tinyMCE.getInstanceById(editor_id);
        switch (command) {
            case "mceVisualChars":
                this._toggleVisualChars(editor_id, inst);
                return true;
        }
        return false;
    },
    cleanup : function(type, content, inst) {
        if (type == "insert_to_editor_dom" || type == "get_from_editor_dom") {
            inst.visualChars.state = true;
            this._toggleVisualChars(inst.editorId, inst);
        }
        return content;
    },
    // Private plugin internal methods
    _toggleVisualChars : function(editor_id, inst) {
        var nl, i, h, d = inst.getDoc(), b = inst.getBody(), nv, s = inst.selection, bo;
        inst.visualChars.state = !inst.visualChars.state;
        bo = s.getBookmark(true);
        tinyMCE.switchClass(editor_id + '_visualchars', inst.visualChars.state ? 'mceButtonSelected' : 'mceButtonNormal');
        if (inst.visualChars.state) {
            nl = tinyMCE.selectNodes(b, function(n) {return n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1;});
            if (t.state) {
                nl = [];
                tinymce.walk(b, function(n) {
                    if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)
                        nl.push(n);
                }, 'childNodes');
            for (i=0; i<nl.length; i++) {
                nv = nl[i].nodeValue;
                nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHiddenVisualChar">$1</span>');
                    nv = nv.replace(/(\u00a0+)/g, '<span class="mceItemHidden mceVisualNbsp">$1</span>');
                nv = nv.replace(/\u00a0/g, '\u00b7');
                tinyMCE.setOuterHTML(nl[i], nv, d);
                    ed.dom.setOuterHTML(nl[i], nv, d);
            }
        } else {
            nl = tinyMCE.selectNodes(b, function(n) {return n.nodeType == 1 && n.nodeName == 'SPAN' && n.className == 'mceItemHiddenVisualChar';});
                nl = tinymce.grep(ed.dom.select('span', b), function(n) {
                    return ed.dom.hasClass(n, 'mceVisualNbsp');
                });
            for (i=0; i<nl.length; i++)
                tinyMCE.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(&middot;|\u00b7)/g, '&nbsp;'), d);
                    ed.dom.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(&middot;|\u00b7)/g, '&nbsp;'), d);
        }
        //s.moveToBookmark(bo);
    }
};
    });
tinyMCE.addPlugin("visualchars", TinyMCE_VisualCharsPlugin);
    // Register plugin
    tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);
})();
program/js/tiny_mce/plugins/visualchars/images/visualchars.gif
Binary files differ
program/js/tiny_mce/plugins/visualchars/langs/en.js
File was deleted
program/js/tiny_mce/plugins/xhtmlxtras/abbr.htm
New file
@@ -0,0 +1,149 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#xhtmlxtras_dlg.title_abbr_element}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/element_common.js"></script>
    <script type="text/javascript" src="js/abbr.js"></script>
    <link rel="stylesheet" type="text/css" href="css/popup.css" />
    <base target="_self" />
</head>
<body style="display: none">
<form onsubmit="insertAbbr();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
            <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
                        <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
                        <td><input id="id" name="id" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
                        <td>
                            <select id="class" name="class" class="field mceEditableSelect">
                                <option value="">{#not_set}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
                        <td><input id="style" name="style" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
                        <td>
                            <select id="dir" name="dir" class="field">
                                <option value="">{#not_set}</option>
                                <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
                                <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
                        <td>
                            <input id="lang" name="lang" type="text" value="" class="field" />
                        </td>
                    </tr>
                </table>
            </fieldset>
        </div>
        <div id="events_panel" class="panel">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label for="onfocus">onfocus</label>:</td>
                        <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onblur">onblur</label>:</td>
                        <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onclick">onclick</label>:</td>
                        <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="ondblclick">ondblclick</label>:</td>
                        <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousedown">onmousedown</label>:</td>
                        <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseup">onmouseup</label>:</td>
                        <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseover">onmouseover</label>:</td>
                        <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousemove">onmousemove</label>:</td>
                        <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseout">onmouseout</label>:</td>
                        <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeypress">onkeypress</label>:</td>
                        <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeydown">onkeydown</label>:</td>
                        <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeyup">onkeyup</label>:</td>
                        <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: left">
            <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/xhtmlxtras/acronym.htm
New file
@@ -0,0 +1,149 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#xhtmlxtras_dlg.title_acronym_element}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/element_common.js"></script>
    <script type="text/javascript" src="js/acronym.js"></script>
    <link rel="stylesheet" type="text/css" href="css/popup.css" />
    <base target="_self" />
</head>
<body style="display: none">
<form onsubmit="insertAcronym();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
            <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
                        <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
                        <td><input id="id" name="id" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
                        <td>
                            <select id="class" name="class" class="field mceEditableSelect">
                                <option value="">{#not_set}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
                        <td><input id="style" name="style" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
                        <td>
                            <select id="dir" name="dir" class="field">
                                <option value="">{#not_set}</option>
                                <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
                                <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
                        <td>
                            <input id="lang" name="lang" type="text" value="" class="field" />
                        </td>
                    </tr>
                </table>
            </fieldset>
        </div>
        <div id="events_panel" class="panel">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label for="onfocus">onfocus</label>:</td>
                        <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onblur">onblur</label>:</td>
                        <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onclick">onclick</label>:</td>
                        <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="ondblclick">ondblclick</label>:</td>
                        <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousedown">onmousedown</label>:</td>
                        <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseup">onmouseup</label>:</td>
                        <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseover">onmouseover</label>:</td>
                        <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousemove">onmousemove</label>:</td>
                        <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseout">onmouseout</label>:</td>
                        <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeypress">onkeypress</label>:</td>
                        <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeydown">onkeydown</label>:</td>
                        <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeyup">onkeyup</label>:</td>
                        <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: left">
            <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/xhtmlxtras/attributes.htm
New file
@@ -0,0 +1,154 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#xhtmlxtras_dlg.attribs_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="js/attributes.js"></script>
    <link rel="stylesheet" type="text/css" href="css/attributes.css" />
    <base target="_self" />
</head>
<body style="display: none">
<form onsubmit="insertAction();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>
            <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
                        <td><input id="title" name="title" type="text" value="" class="mceFocus" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
                        <td><input id="id" name="id" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td><label id="classlabel" for="classlist">{#class_name}</label></td>
                        <td>
                            <select id="classlist" name="classlist" class="mceEditableSelect">
                                <option value="" selected>{#not_set}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
                        <td><input id="style" name="style" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
                        <td>
                            <select id="dir" name="dir">
                                <option value="">{#not_set}</option>
                                <option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option>
                                <option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
                        <td>
                            <input id="lang" name="lang" type="text" value="" />
                        </td>
                    </tr>
                    <tr>
                            <td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>
                            <td><input type="text" id="tabindex" name="tabindex" value="" /></td>
                        </tr>
                        <tr>
                            <td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>
                            <td><input type="text" id="accesskey" name="accesskey" value="" /></td>
                        </tr>
                </table>
            </fieldset>
        </div>
        <div id="events_panel" class="panel">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label for="onfocus">onfocus</label>:</td>
                        <td><input id="onfocus" name="onfocus" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onblur">onblur</label>:</td>
                        <td><input id="onblur" name="onblur" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onclick">onclick</label>:</td>
                        <td><input id="onclick" name="onclick" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="ondblclick">ondblclick</label>:</td>
                        <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousedown">onmousedown</label>:</td>
                        <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseup">onmouseup</label>:</td>
                        <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseover">onmouseover</label>:</td>
                        <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousemove">onmousemove</label>:</td>
                        <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseout">onmouseout</label>:</td>
                        <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeypress">onkeypress</label>:</td>
                        <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeydown">onkeydown</label>:</td>
                        <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeyup">onkeyup</label>:</td>
                        <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td>
                    </tr>
                </table>
            </fieldset>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" id="insert" name="insert" value="{#insert}" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/xhtmlxtras/cite.htm
New file
@@ -0,0 +1,149 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#xhtmlxtras_dlg.title_cite_element}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/element_common.js"></script>
    <script type="text/javascript" src="js/cite.js"></script>
    <link rel="stylesheet" type="text/css" href="css/popup.css" />
    <base target="_self" />
</head>
<body style="display: none">
<form onsubmit="insertCite();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
            <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
                        <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
                        <td><input id="id" name="id" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
                        <td>
                            <select id="class" name="class" class="field mceEditableSelect">
                                <option value="">{#not_set}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
                        <td><input id="style" name="style" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
                        <td>
                            <select id="dir" name="dir" class="field">
                                <option value="">{#not_set}</option>
                                <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
                                <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
                        <td>
                            <input id="lang" name="lang" type="text" value="" class="field" />
                        </td>
                    </tr>
                </table>
            </fieldset>
        </div>
        <div id="events_panel" class="panel">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label for="onfocus">onfocus</label>:</td>
                        <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onblur">onblur</label>:</td>
                        <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onclick">onclick</label>:</td>
                        <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="ondblclick">ondblclick</label>:</td>
                        <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousedown">onmousedown</label>:</td>
                        <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseup">onmouseup</label>:</td>
                        <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseover">onmouseover</label>:</td>
                        <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousemove">onmousemove</label>:</td>
                        <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseout">onmouseout</label>:</td>
                        <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeypress">onkeypress</label>:</td>
                        <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeydown">onkeydown</label>:</td>
                        <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeyup">onkeyup</label>:</td>
                        <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: left">
            <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/xhtmlxtras/css/attributes.css
New file
@@ -0,0 +1,11 @@
.panel_wrapper div.current {
    height: 290px;
}
#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {
    width: 200px;
}
#events_panel input {
    width: 200px;
}
program/js/tiny_mce/plugins/xhtmlxtras/css/popup.css
New file
@@ -0,0 +1,9 @@
input.field, select.field {width:200px;}
input.picker {width:179px; margin-left: 5px;}
input.disabled {border-color:#F2F2F2;}
img.picker {vertical-align:text-bottom; cursor:pointer;}
h1 {padding: 0 0 5px 0;}
.panel_wrapper div.current {height:160px;}
#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}
a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}
#datetime {width:180px;}
program/js/tiny_mce/plugins/xhtmlxtras/css/xhtmlxtras.css
New file
@@ -0,0 +1,24 @@
ins {
    border-bottom: 1px solid green;
    text-decoration: none;
    color: green;
}
del {
    color: Red;
    text-decoration: line-through;
}
cite {
    border-bottom: 1px dashed blue;
}
acronym {
    border-bottom: 1px dotted #CCC;
    cursor: help;
}
abbr, html\:abbr {
    border-bottom: 1px dashed #CCC;
    cursor: help;
}
program/js/tiny_mce/plugins/xhtmlxtras/del.htm
New file
@@ -0,0 +1,170 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#xhtmlxtras_dlg.title_del_element}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/element_common.js"></script>
    <script type="text/javascript" src="js/del.js"></script>
    <link rel="stylesheet" type="text/css" href="css/popup.css" />
    <base target="_self" />
</head>
<body id="xhtmlxtrasins" style="display: none">
<form onsubmit="insertDel();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
            <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>
                        <td>
                            <table border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                    <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td>
                                    <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>
                        <td><input id="cite" name="cite" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
                        <td><input id="title" name="title" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
                        <td><input id="id" name="id" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
                        <td>
                            <select id="class" name="class" class="field mceEditableSelect">
                                <option value="">{#not_set}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
                        <td><input id="style" name="style" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
                        <td>
                            <select id="dir" name="dir" class="field">
                                <option value="">{#not_set}</option>
                                <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
                                <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
                        <td>
                            <input id="lang" name="lang" type="text" value="" class="field" />
                        </td>
                    </tr>
                </table>
            </fieldset>
        </div>
        <div id="events_panel" class="panel">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label for="onfocus">onfocus</label>:</td>
                        <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onblur">onblur</label>:</td>
                        <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onclick">onclick</label>:</td>
                        <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="ondblclick">ondblclick</label>:</td>
                        <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousedown">onmousedown</label>:</td>
                        <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseup">onmouseup</label>:</td>
                        <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseover">onmouseover</label>:</td>
                        <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousemove">onmousemove</label>:</td>
                        <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseout">onmouseout</label>:</td>
                        <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeypress">onkeypress</label>:</td>
                        <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeydown">onkeydown</label>:</td>
                        <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeyup">onkeyup</label>:</td>
                        <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: left">
            <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
New file
@@ -0,0 +1 @@
(function(){tinymce.create('tinymce.plugins.XHTMLXtrasPlugin',{init:function(ed,url){ed.addCommand('mceCite',function(){ed.windowManager.open({file:url+'/cite.htm',width:350+parseInt(ed.getLang('xhtmlxtras.cite_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.cite_delta_height',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAcronym',function(){ed.windowManager.open({file:url+'/acronym.htm',width:350+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.acronym_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAbbr',function(){ed.windowManager.open({file:url+'/abbr.htm',width:350+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),height:250+parseInt(ed.getLang('xhtmlxtras.abbr_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceDel',function(){ed.windowManager.open({file:url+'/del.htm',width:340+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.del_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceIns',function(){ed.windowManager.open({file:url+'/ins.htm',width:340+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),height:310+parseInt(ed.getLang('xhtmlxtras.ins_delta_width',0)),inline:1},{plugin_url:url});});ed.addCommand('mceAttributes',function(){ed.windowManager.open({file:url+'/attributes.htm',width:380,height:370,inline:1},{plugin_url:url});});ed.addButton('cite',{title:'xhtmlxtras.cite_desc',cmd:'mceCite'});ed.addButton('acronym',{title:'xhtmlxtras.acronym_desc',cmd:'mceAcronym'});ed.addButton('abbr',{title:'xhtmlxtras.abbr_desc',cmd:'mceAbbr'});ed.addButton('del',{title:'xhtmlxtras.del_desc',cmd:'mceDel'});ed.addButton('ins',{title:'xhtmlxtras.ins_desc',cmd:'mceIns'});ed.addButton('attribs',{title:'xhtmlxtras.attribs_desc',cmd:'mceAttributes'});if(tinymce.isIE){function fix(ed,o){if(o.set){o.content=o.content.replace(/<abbr([^>]+)>/gi,'<html:abbr $1>');o.content=o.content.replace(/<\/abbr>/gi,'</html:abbr>');}};ed.onBeforeSetContent.add(fix);ed.onPostProcess.add(fix);}ed.onNodeChange.add(function(ed,cm,n,co){n=ed.dom.getParent(n,'CITE,ACRONYM,ABBR,DEL,INS');cm.setDisabled('cite',co);cm.setDisabled('acronym',co);cm.setDisabled('abbr',co);cm.setDisabled('del',co);cm.setDisabled('ins',co);cm.setDisabled('attribs',n&&n.nodeName=='BODY');if(n){cm.setDisabled(n.nodeName.toLowerCase(),0);cm.setActive(n.nodeName.toLowerCase(),1);}else{cm.setActive('cite',0);cm.setActive('acronym',0);cm.setActive('abbr',0);cm.setActive('del',0);cm.setActive('ins',0);}});},getInfo:function(){return{longname:'XHTML Xtras Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('xhtmlxtras',tinymce.plugins.XHTMLXtrasPlugin);})();
program/js/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
New file
@@ -0,0 +1,134 @@
/**
 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {
        init : function(ed, url) {
            // Register commands
            ed.addCommand('mceCite', function() {
                ed.windowManager.open({
                    file : url + '/cite.htm',
                    width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),
                    height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
            ed.addCommand('mceAcronym', function() {
                ed.windowManager.open({
                    file : url + '/acronym.htm',
                    width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),
                    height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
            ed.addCommand('mceAbbr', function() {
                ed.windowManager.open({
                    file : url + '/abbr.htm',
                    width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),
                    height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
            ed.addCommand('mceDel', function() {
                ed.windowManager.open({
                    file : url + '/del.htm',
                    width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),
                    height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
            ed.addCommand('mceIns', function() {
                ed.windowManager.open({
                    file : url + '/ins.htm',
                    width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),
                    height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
            ed.addCommand('mceAttributes', function() {
                ed.windowManager.open({
                    file : url + '/attributes.htm',
                    width : 380,
                    height : 370,
                    inline : 1
                }, {
                    plugin_url : url
                });
            });
            // Register buttons
            ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});
            ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});
            ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});
            ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});
            ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});
            ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});
            if (tinymce.isIE) {
                function fix(ed, o) {
                    if (o.set) {
                        o.content = o.content.replace(/<abbr([^>]+)>/gi, '<html:abbr $1>');
                        o.content = o.content.replace(/<\/abbr>/gi, '</html:abbr>');
                    }
                };
                ed.onBeforeSetContent.add(fix);
                ed.onPostProcess.add(fix);
            }
            ed.onNodeChange.add(function(ed, cm, n, co) {
                n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');
                cm.setDisabled('cite', co);
                cm.setDisabled('acronym', co);
                cm.setDisabled('abbr', co);
                cm.setDisabled('del', co);
                cm.setDisabled('ins', co);
                cm.setDisabled('attribs', n && n.nodeName == 'BODY');
                if (n) {
                    cm.setDisabled(n.nodeName.toLowerCase(), 0);
                    cm.setActive(n.nodeName.toLowerCase(), 1);
                } else {
                    cm.setActive('cite', 0);
                    cm.setActive('acronym', 0);
                    cm.setActive('abbr', 0);
                    cm.setActive('del', 0);
                    cm.setActive('ins', 0);
                }
            });
        },
        getInfo : function() {
            return {
                longname : 'XHTML Xtras Plugin',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
        }
    });
    // Register plugin
    tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);
})();
program/js/tiny_mce/plugins/xhtmlxtras/ins.htm
New file
@@ -0,0 +1,170 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{#xhtmlxtras_dlg.title_ins_element}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/editable_selects.js"></script>
    <script type="text/javascript" src="js/element_common.js"></script>
    <script type="text/javascript" src="js/ins.js"></script>
    <link rel="stylesheet" type="text/css" href="css/popup.css" />
    <base target="_self" />
</head>
<body id="xhtmlxtrasins" style="display: none">
<form onsubmit="insertIns();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>
            <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>
                        <td>
                            <table border="0" cellspacing="0" cellpadding="0">
                                <tr>
                                    <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td>
                                    <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" alt="{#xhtmlxtras_dlg.insert_date}" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>
                                </tr>
                            </table>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>
                        <td><input id="cite" name="cite" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td>
                        <td><input id="title" name="title" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td>
                        <td><input id="id" name="id" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td>
                        <td>
                            <select id="class" name="class" class="field mceEditableSelect">
                                <option value="">{#not_set}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
                        <td><input id="style" name="style" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td>
                        <td>
                            <select id="dir" name="dir" class="field">
                                <option value="">{#not_set}</option>
                                <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option>
                                <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option>
                            </select>
                        </td>
                    </tr>
                    <tr>
                        <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td>
                        <td>
                            <input id="lang" name="lang" type="text" value="" class="field" />
                        </td>
                    </tr>
                </table>
            </fieldset>
        </div>
        <div id="events_panel" class="panel">
            <fieldset>
                <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>
                <table border="0" cellpadding="0" cellspacing="4">
                    <tr>
                        <td class="label"><label for="onfocus">onfocus</label>:</td>
                        <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onblur">onblur</label>:</td>
                        <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onclick">onclick</label>:</td>
                        <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="ondblclick">ondblclick</label>:</td>
                        <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousedown">onmousedown</label>:</td>
                        <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseup">onmouseup</label>:</td>
                        <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseover">onmouseover</label>:</td>
                        <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmousemove">onmousemove</label>:</td>
                        <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onmouseout">onmouseout</label>:</td>
                        <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeypress">onkeypress</label>:</td>
                        <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeydown">onkeydown</label>:</td>
                        <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td>
                    </tr>
                    <tr>
                        <td class="label"><label for="onkeyup">onkeyup</label>:</td>
                        <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td>
                    </tr>
                </table>
            </fieldset>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: left">
            <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/plugins/xhtmlxtras/js/abbr.js
New file
@@ -0,0 +1,25 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function init() {
    SXE.initElementDialog('abbr');
    if (SXE.currentAction == "update") {
        SXE.showRemoveButton();
    }
}
function insertAbbr() {
    SXE.insertElement(tinymce.isIE ? 'html:abbr' : 'abbr');
    tinyMCEPopup.close();
}
function removeAbbr() {
    SXE.removeElement('abbr');
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/xhtmlxtras/js/acronym.js
New file
@@ -0,0 +1,25 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function init() {
    SXE.initElementDialog('acronym');
    if (SXE.currentAction == "update") {
        SXE.showRemoveButton();
    }
}
function insertAcronym() {
    SXE.insertElement('acronym');
    tinyMCEPopup.close();
}
function removeAcronym() {
    SXE.removeElement('acronym');
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/xhtmlxtras/js/attributes.js
New file
@@ -0,0 +1,123 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
 */
function init() {
    tinyMCEPopup.resizeToInnerSize();
    var inst = tinyMCEPopup.editor;
    var dom = inst.dom;
    var elm = inst.selection.getNode();
    var f = document.forms[0];
    var onclick = dom.getAttrib(elm, 'onclick');
    setFormValue('title', dom.getAttrib(elm, 'title'));
    setFormValue('id', dom.getAttrib(elm, 'id'));
    setFormValue('style', dom.getAttrib(elm, "style"));
    setFormValue('dir', dom.getAttrib(elm, 'dir'));
    setFormValue('lang', dom.getAttrib(elm, 'lang'));
    setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));
    setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));
    setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
    setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
    setFormValue('onclick', onclick);
    setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
    setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
    setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
    setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
    setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
    setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
    setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
    setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
    setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
    className = dom.getAttrib(elm, 'class');
    addClassesToList('classlist', 'advlink_styles');
    selectByValue(f, 'classlist', className, true);
    TinyMCE_EditableSelects.init();
}
function setFormValue(name, value) {
    if(value && document.forms[0].elements[name]){
        document.forms[0].elements[name].value = value;
    }
}
function insertAction() {
    var inst = tinyMCEPopup.editor;
    var elm = inst.selection.getNode();
    tinyMCEPopup.execCommand("mceBeginUndoLevel");
    setAllAttribs(elm);
    tinyMCEPopup.execCommand("mceEndUndoLevel");
    tinyMCEPopup.close();
}
function setAttrib(elm, attrib, value) {
    var formObj = document.forms[0];
    var valueElm = formObj.elements[attrib.toLowerCase()];
    var inst = tinyMCEPopup.editor;
    var dom = inst.dom;
    if (typeof(value) == "undefined" || value == null) {
        value = "";
        if (valueElm)
            value = valueElm.value;
    }
    if (value != "") {
        dom.setAttrib(elm, attrib.toLowerCase(), value);
        if (attrib == "style")
            attrib = "style.cssText";
        if (attrib.substring(0, 2) == 'on')
            value = 'return true;' + value;
        if (attrib == "class")
            attrib = "className";
        elm[attrib]=value;
    } else
        elm.removeAttribute(attrib);
}
function setAllAttribs(elm) {
    var f = document.forms[0];
    setAttrib(elm, 'title');
    setAttrib(elm, 'id');
    setAttrib(elm, 'style');
    setAttrib(elm, 'class', getSelectValue(f, 'classlist'));
    setAttrib(elm, 'dir');
    setAttrib(elm, 'lang');
    setAttrib(elm, 'tabindex');
    setAttrib(elm, 'accesskey');
    setAttrib(elm, 'onfocus');
    setAttrib(elm, 'onblur');
    setAttrib(elm, 'onclick');
    setAttrib(elm, 'ondblclick');
    setAttrib(elm, 'onmousedown');
    setAttrib(elm, 'onmouseup');
    setAttrib(elm, 'onmouseover');
    setAttrib(elm, 'onmousemove');
    setAttrib(elm, 'onmouseout');
    setAttrib(elm, 'onkeypress');
    setAttrib(elm, 'onkeydown');
    setAttrib(elm, 'onkeyup');
    // Refresh in old MSIE
//    if (tinyMCE.isMSIE5)
//        elm.outerHTML = elm.outerHTML;
}
function insertAttribute() {
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
tinyMCEPopup.requireLangPack();
program/js/tiny_mce/plugins/xhtmlxtras/js/cite.js
New file
@@ -0,0 +1,25 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function init() {
    SXE.initElementDialog('cite');
    if (SXE.currentAction == "update") {
        SXE.showRemoveButton();
    }
}
function insertCite() {
    SXE.insertElement('cite');
    tinyMCEPopup.close();
}
function removeCite() {
    SXE.removeElement('cite');
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/xhtmlxtras/js/del.js
New file
@@ -0,0 +1,50 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function init() {
    SXE.initElementDialog('del');
    if (SXE.currentAction == "update") {
        setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));
        setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));
        SXE.showRemoveButton();
    }
}
function setElementAttribs(elm) {
    setAllCommonAttribs(elm);
    setAttrib(elm, 'datetime');
    setAttrib(elm, 'cite');
}
function insertDel() {
    var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');
    tinyMCEPopup.execCommand('mceBeginUndoLevel');
    if (elm == null) {
        var s = SXE.inst.selection.getContent();
        if(s.length > 0) {
            tinyMCEPopup.execCommand('mceInsertContent', false, '<del id="#sxe_temp_del#">' + s + '</del>');
            var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';});
            for (var i=0; i<elementArray.length; i++) {
                var elm = elementArray[i];
                setElementAttribs(elm);
            }
        }
    } else {
        setElementAttribs(elm);
    }
    tinyMCEPopup.editor.nodeChanged();
    tinyMCEPopup.execCommand('mceEndUndoLevel');
    tinyMCEPopup.close();
}
function removeDel() {
    SXE.removeElement('del');
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/xhtmlxtras/js/element_common.js
New file
@@ -0,0 +1,221 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
tinyMCEPopup.requireLangPack();
function initCommonAttributes(elm) {
    var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;
    // Setup form data for common element attributes
    setFormValue('title', dom.getAttrib(elm, 'title'));
    setFormValue('id', dom.getAttrib(elm, 'id'));
    selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);
    setFormValue('style', dom.getAttrib(elm, 'style'));
    selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));
    setFormValue('lang', dom.getAttrib(elm, 'lang'));
    setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));
    setFormValue('onblur', dom.getAttrib(elm, 'onblur'));
    setFormValue('onclick', dom.getAttrib(elm, 'onclick'));
    setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));
    setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));
    setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));
    setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));
    setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));
    setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));
    setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));
    setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));
    setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));
}
function setFormValue(name, value) {
    if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;
}
function insertDateTime(id) {
    document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");
}
function getDateTime(d, fmt) {
    fmt = fmt.replace("%D", "%m/%d/%y");
    fmt = fmt.replace("%r", "%I:%M:%S %p");
    fmt = fmt.replace("%Y", "" + d.getFullYear());
    fmt = fmt.replace("%y", "" + d.getYear());
    fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));
    fmt = fmt.replace("%d", addZeros(d.getDate(), 2));
    fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));
    fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));
    fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));
    fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));
    fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));
    fmt = fmt.replace("%%", "%");
    return fmt;
}
function addZeros(value, len) {
    var i;
    value = "" + value;
    if (value.length < len) {
        for (i=0; i<(len-value.length); i++)
            value = "0" + value;
    }
    return value;
}
function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
    if (!form_obj || !form_obj.elements[field_name])
        return;
    var sel = form_obj.elements[field_name];
    var found = false;
    for (var i=0; i<sel.options.length; i++) {
        var option = sel.options[i];
        if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {
            option.selected = true;
            found = true;
        } else
            option.selected = false;
    }
    if (!found && add_custom && value != '') {
        var option = new Option('Value: ' + value, value);
        option.selected = true;
        sel.options[sel.options.length] = option;
    }
    return found;
}
function setAttrib(elm, attrib, value) {
    var formObj = document.forms[0];
    var valueElm = formObj.elements[attrib.toLowerCase()];
    tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);
}
function setAllCommonAttribs(elm) {
    setAttrib(elm, 'title');
    setAttrib(elm, 'id');
    setAttrib(elm, 'class');
    setAttrib(elm, 'style');
    setAttrib(elm, 'dir');
    setAttrib(elm, 'lang');
    /*setAttrib(elm, 'onfocus');
    setAttrib(elm, 'onblur');
    setAttrib(elm, 'onclick');
    setAttrib(elm, 'ondblclick');
    setAttrib(elm, 'onmousedown');
    setAttrib(elm, 'onmouseup');
    setAttrib(elm, 'onmouseover');
    setAttrib(elm, 'onmousemove');
    setAttrib(elm, 'onmouseout');
    setAttrib(elm, 'onkeypress');
    setAttrib(elm, 'onkeydown');
    setAttrib(elm, 'onkeyup');*/
}
SXE = {
    currentAction : "insert",
    inst : tinyMCEPopup.editor,
    updateElement : null
}
SXE.focusElement = SXE.inst.selection.getNode();
SXE.initElementDialog = function(element_name) {
    addClassesToList('class', 'xhtmlxtras_styles');
    TinyMCE_EditableSelects.init();
    element_name = element_name.toLowerCase();
    var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
    if (elm != null && elm.nodeName == element_name.toUpperCase()) {
        SXE.currentAction = "update";
    }
    if (SXE.currentAction == "update") {
        initCommonAttributes(elm);
        SXE.updateElement = elm;
    }
    document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true);
}
SXE.insertElement = function(element_name) {
    var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;
    tinyMCEPopup.execCommand('mceBeginUndoLevel');
    if (elm == null) {
        var s = SXE.inst.selection.getContent();
        if(s.length > 0) {
            tagName = element_name;
            if (tinymce.isIE && element_name.indexOf('html:') == 0)
                element_name = element_name.substring(5).toLowerCase();
            h = '<' + tagName + ' id="#sxe_temp_' + element_name + '#">' + s + '</' + tagName + '>';
            tinyMCEPopup.execCommand('mceInsertContent', false, h);
            var elementArray = tinymce.grep(SXE.inst.dom.select(element_name), function(n) {return n.id == '#sxe_temp_' + element_name + '#';});
            for (var i=0; i<elementArray.length; i++) {
                var elm = elementArray[i];
                elm.id = '';
                elm.setAttribute('id', '');
                elm.removeAttribute('id');
                setAllCommonAttribs(elm);
            }
        }
    } else {
        setAllCommonAttribs(elm);
    }
    SXE.inst.nodeChanged();
    tinyMCEPopup.execCommand('mceEndUndoLevel');
}
SXE.removeElement = function(element_name){
    element_name = element_name.toLowerCase();
    elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());
    if(elm && elm.nodeName == element_name.toUpperCase()){
        tinyMCEPopup.execCommand('mceBeginUndoLevel');
        tinyMCE.execCommand('mceRemoveNode', false, elm);
        SXE.inst.nodeChanged();
        tinyMCEPopup.execCommand('mceEndUndoLevel');
    }
}
SXE.showRemoveButton = function() {
        document.getElementById("remove").style.display = 'block';
}
SXE.containsClass = function(elm,cl) {
    return (elm.className.indexOf(cl) > -1) ? true : false;
}
SXE.removeClass = function(elm,cl) {
    if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {
        return true;
    }
    var classNames = elm.className.split(" ");
    var newClassNames = "";
    for (var x = 0, cnl = classNames.length; x < cnl; x++) {
        if (classNames[x] != cl) {
            newClassNames += (classNames[x] + " ");
        }
    }
    elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end
}
SXE.addClass = function(elm,cl) {
    if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;
    return true;
}
program/js/tiny_mce/plugins/xhtmlxtras/js/ins.js
New file
@@ -0,0 +1,49 @@
 /**
 * $Id: editor_plugin_src.js 42 2006-08-08 14:32:24Z spocke $
 *
 * @author Moxiecode - based on work by Andrew Tetlaw
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function init() {
    SXE.initElementDialog('ins');
    if (SXE.currentAction == "update") {
        setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));
        setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));
        SXE.showRemoveButton();
    }
}
function setElementAttribs(elm) {
    setAllCommonAttribs(elm);
    setAttrib(elm, 'datetime');
    setAttrib(elm, 'cite');
}
function insertIns() {
    var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');
    tinyMCEPopup.execCommand('mceBeginUndoLevel');
    if (elm == null) {
        var s = SXE.inst.selection.getContent();
        if(s.length > 0) {
            tinyMCEPopup.execCommand('mceInsertContent', false, '<ins id="#sxe_temp_ins#">' + s + '</ins>');
            var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';});
            for (var i=0; i<elementArray.length; i++) {
                var elm = elementArray[i];
                setElementAttribs(elm);
            }
        }
    } else {
        setElementAttribs(elm);
    }
    tinyMCEPopup.editor.nodeChanged();
    tinyMCEPopup.execCommand('mceEndUndoLevel');
    tinyMCEPopup.close();
}
function removeIns() {
    SXE.removeElement('ins');
    tinyMCEPopup.close();
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
New file
@@ -0,0 +1,32 @@
tinyMCE.addI18n('en.xhtmlxtras_dlg',{
attribute_label_title:"Title",
attribute_label_id:"ID",
attribute_label_class:"Class",
attribute_label_style:"Style",
attribute_label_cite:"Cite",
attribute_label_datetime:"Date/Time",
attribute_label_langdir:"Text Direction",
attribute_option_ltr:"Left to right",
attribute_option_rtl:"Right to left",
attribute_label_langcode:"Language",
attribute_label_tabindex:"TabIndex",
attribute_label_accesskey:"AccessKey",
attribute_events_tab:"Events",
attribute_attrib_tab:"Attributes",
general_tab:"General",
attrib_tab:"Attributes",
events_tab:"Events",
fieldset_general_tab:"General Settings",
fieldset_attrib_tab:"Element Attributes",
fieldset_events_tab:"Element Events",
title_ins_element:"Insertion Element",
title_del_element:"Deletion Element",
title_acronym_element:"Acronym Element",
title_abbr_element:"Abbreviation Element",
title_cite_element:"Citation Element",
remove:"Remove",
insert_date:"Insert current date/time",
option_ltr:"Left to right",
option_rtl:"Right to left",
attribs_title:"Insert/Edit Attributes"
});
program/js/tiny_mce/themes/advanced/about.htm
@@ -1,35 +1,39 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_about_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/about.js"></script>
    <base target="_self" />
    <title>{#advanced_dlg.about_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="js/about.js"></script>
</head>
<body id="about" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body id="about" style="display: none">
        <div class="tabs">
            <ul>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_about}</a></span></li>
                <li id="help_tab"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{$lang_help}</a></span></li>
                <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{$lang_plugins}</a></span></li>
                <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>
                <li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>
                <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>
            </ul>
        </div>
        <div class="panel_wrapper">
            <div id="general_panel" class="panel current">
                <h3>{$lang_about_title}</h3>
                <p>Version: {$tinymce_version} ({$tinymce_releasedate})</p>
                <h3>{#advanced_dlg.about_title}</h3>
                <p>Version: <span id="version"></span> (<span id="date"></span>)</p>
                <p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>
                by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>
                <p>Copyright &copy; 2003-2007, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
                <p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>
                <p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>
                <div id="buttoncontainer"></div>
                <div id="buttoncontainer">
                    <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>
                    <a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>
                    <a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>
                </div>
            </div>
            <div id="plugins_panel" class="panel">
                <div id="pluginscontainer">
                    <h3>{$lang_loaded_plugins}</h3>
                    <h3>{#advanced_dlg.about_loaded}</h3>
                    <div id="plugintablecontainer">
                    </div>
@@ -45,7 +49,7 @@
        <div class="mceActionPanel">
            <div style="float: right">
                <input type="button" id="cancel" name="cancel" value="{$lang_close}" onclick="tinyMCEPopup.close();" />
                <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />
            </div>
        </div>
</body>
program/js/tiny_mce/themes/advanced/anchor.htm
@@ -1,33 +1,32 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_insert_anchor_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/anchor.js"></script>
    <title>{#advanced_dlg.anchor_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/anchor.js"></script>
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<form onsubmit="insertAnchor();return false;" action="#">
<body style="display: none">
<form onsubmit="AnchorDialog.update();return false;" action="#">
    <table border="0" cellpadding="4" cellspacing="0">
        <tr>
            <td colspan="2" class="title">{$lang_insert_anchor_title}</td>
            <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>
        </tr>
        <tr>
            <td nowrap="nowrap">{$lang_insert_anchor_name}:</td>
            <td><input name="anchorName" type="text" id="anchorName" value="" style="width: 200px" /></td>
            <td nowrap="nowrap">{#advanced_dlg.anchor_name}:</td>
            <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>
        </tr>
    </table>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_update}" onclick="insertAnchor();" />
            <input type="submit" id="insert" name="insert" value="{#update}" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/themes/advanced/charmap.htm
@@ -1,27 +1,28 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_theme_charmap_title}</title>
    <title>{#advanced_dlg.charmap_title}</title>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/charmap.js"></script>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/charmap.js"></script>
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body id="charmap" style="display:none">
<table align="center" border="0" cellspacing="0" cellpadding="2">
    <tr>
        <td colspan="2" class="title">{$lang_theme_charmap_title}</td>
        <td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>
    </tr>
    <tr>
        <td rowspan="2" align="left" valign="top">
            <script language="javascript" type="text/javascript">renderCharMapHTML();</script>
        <td id="charmapView" rowspan="2" align="left" valign="top">
            <!-- Chars will be rendered here -->
        </td>
        <td width="100" align="center" valign="top">
            <table border="0" cellpadding="0" cellspacing="0" width="100" style="height: 100px">
                <tr>
                    <td class="charmapOver" style="font-size: 40px; height:80px;" id="codeV">&nbsp;</td>
                    <td id="codeV">&nbsp;</td>
                </tr>
                <tr>
                    <td style="font-size: 10px; font-family: Arial, Helvetica, sans-serif; text-align:center;" id="codeN">&nbsp;</td>
                    <td id="codeN">&nbsp;</td>
                </tr>
            </table>
        </td>
program/js/tiny_mce/themes/advanced/color_picker.htm
@@ -1,27 +1,28 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_theme_colorpicker_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/color_picker.js"></script>
    <link href="css/colorpicker.css" rel="stylesheet" type="text/css" />
    <title>{#advanced_dlg.colorpicker_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="js/color_picker.js"></script>
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<body id="colorpicker" style="display: none">
<form onsubmit="insertAction();return false" action="#">
    <div class="tabs">
        <ul>
            <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{$lang_color_picker_tab}</a></span></li>
            <li id="rgb_tab"><span><a href="#" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{$lang_web_colors_tab}</a></span></li>
            <li id="named_tab"><span><a  href="#" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{$lang_named_colors_tab}</a></span></li>
            <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>
            <li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>
            <li id="named_tab"><span><a  href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="picker_panel" class="panel current">
            <fieldset>
                <legend>{$lang_color_picker}</legend>
                <legend>{#advanced_dlg.colorpicker_picker_title}</legend>
                <div id="picker">
                    <img id="colorpicker" src="images/colors.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />
                    <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" />
                    <div id="light">
                        <!-- Will be filled with divs -->
@@ -34,7 +35,7 @@
        <div id="rgb_panel" class="panel">
            <fieldset>
                <legend>{$lang_web_colors}</legend>
                <legend>{#advanced_dlg.colorpicker_palette_title}</legend>
                <div id="webcolors">
                    <!-- Gets filled with web safe colors-->
                </div>
@@ -45,7 +46,7 @@
        <div id="named_panel" class="panel">
            <fieldset>
                <legend>{$lang_named_colors}</legend>
                <legend>{#advanced_dlg.colorpicker_named_title}</legend>
                <div id="namedcolors">
                    <!-- Gets filled with named colors-->
                </div>
@@ -53,7 +54,7 @@
                <br style="clear: both" />
                <div id="colornamecontainer">
                    {$lang_color_name} <span id="colorname"></span>
                    {#advanced_dlg.colorpicker_name} <span id="colorname"></span>
                </div>
            </fieldset>
        </div>
@@ -61,14 +62,15 @@
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_theme_colorpicker_apply}" onclick="insertAction();" />
            <input type="submit" id="insert" name="insert" value="{#apply}" />
        </div>
        <div id="preview"></div>
        <div id="previewblock">
            <label for="color">{$lang_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text" />
            <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />
        </div>
    </div>
</form>
</body>
</html>
program/js/tiny_mce/themes/advanced/css/editor_content.css
File was deleted
program/js/tiny_mce/themes/advanced/css/editor_popup.css
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/about.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/common_buttons.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/create_accessible_content.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif
Binary files differ
program/js/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif
Binary files differ
program/js/tiny_mce/themes/advanced/docs/en/images/insert_link_window.gif
Binary files differ
program/js/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif
Binary files differ
program/js/tiny_mce/themes/advanced/docs/en/index.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/insert_image_button.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/insert_link_button.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/insert_table_button.htm
File was deleted
program/js/tiny_mce/themes/advanced/docs/en/style.css
File was deleted
program/js/tiny_mce/themes/advanced/editor_template.js
@@ -1 +1 @@
tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_AdvancedTheme={_defColors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",_autoImportCSSClasses:true,_resizer:{},_buttons:[['bold','{$lang_bold_img}','lang_bold_desc','Bold'],['italic','{$lang_italic_img}','lang_italic_desc','Italic'],['underline','{$lang_underline_img}','lang_underline_desc','Underline'],['strikethrough','strikethrough.gif','lang_striketrough_desc','Strikethrough'],['justifyleft','justifyleft.gif','lang_justifyleft_desc','JustifyLeft'],['justifycenter','justifycenter.gif','lang_justifycenter_desc','JustifyCenter'],['justifyright','justifyright.gif','lang_justifyright_desc','JustifyRight'],['justifyfull','justifyfull.gif','lang_justifyfull_desc','JustifyFull'],['bullist','bullist.gif','lang_bullist_desc','InsertUnorderedList'],['numlist','numlist.gif','lang_numlist_desc','InsertOrderedList'],['outdent','outdent.gif','lang_outdent_desc','Outdent'],['indent','indent.gif','lang_indent_desc','Indent'],['cut','cut.gif','lang_cut_desc','Cut'],['copy','copy.gif','lang_copy_desc','Copy'],['paste','paste.gif','lang_paste_desc','Paste'],['undo','undo.gif','lang_undo_desc','Undo'],['redo','redo.gif','lang_redo_desc','Redo'],['link','link.gif','lang_link_desc','mceLink',true],['unlink','unlink.gif','lang_unlink_desc','unlink'],['image','image.gif','lang_image_desc','mceImage',true],['cleanup','cleanup.gif','lang_cleanup_desc','mceCleanup'],['help','help.gif','lang_help_desc','mceHelp'],['code','code.gif','lang_theme_code_desc','mceCodeEditor'],['hr','hr.gif','lang_theme_hr_desc','inserthorizontalrule'],['removeformat','removeformat.gif','lang_theme_removeformat_desc','removeformat'],['sub','sub.gif','lang_theme_sub_desc','subscript'],['sup','sup.gif','lang_theme_sup_desc','superscript'],['forecolor','forecolor.gif','lang_theme_forecolor_desc','forecolor',true],['forecolorpicker','forecolor.gif','lang_theme_forecolor_desc','forecolorpicker',true],['backcolor','backcolor.gif','lang_theme_backcolor_desc','HiliteColor',true],['backcolorpicker','backcolor.gif','lang_theme_backcolor_desc','backcolorpicker',true],['charmap','charmap.gif','lang_theme_charmap_desc','mceCharMap'],['visualaid','visualaid.gif','lang_theme_visualaid_desc','mceToggleVisualAid'],['anchor','anchor.gif','lang_theme_anchor_desc','mceInsertAnchor'],['newdocument','newdocument.gif','lang_newdocument_desc','mceNewDocument']],_buttonMap:'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',getControlHTML:function(button_name){var i,x,but;for(i=0;i<TinyMCE_AdvancedTheme._buttons.length;i++){but=TinyMCE_AdvancedTheme._buttons[i];if(but[0]==button_name&&(button_name=="forecolor"||button_name=="backcolor"))return tinyMCE.getMenuButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3]+"Menu",but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null));if(but[0]==button_name)return tinyMCE.getButtonHTML(but[0],but[2],'{$themeurl}/images/'+but[1],but[3],(but.length>4?but[4]:false),(but.length>5?but[5]:null))}switch(button_name){case"formatselect":var html='<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';var formats=tinyMCE.getParam("theme_advanced_blockformats","p,address,pre,h1,h2,h3,h4,h5,h6",true).split(',');var lookup=[['p','{$lang_theme_paragraph}'],['address','{$lang_theme_address}'],['pre','{$lang_theme_pre}'],['h1','{$lang_theme_h1}'],['h2','{$lang_theme_h2}'],['h3','{$lang_theme_h3}'],['h4','{$lang_theme_h4}'],['h5','{$lang_theme_h5}'],['h6','{$lang_theme_h6}'],['div','{$lang_theme_div}'],['blockquote','{$lang_theme_blockquote}'],['code','{$lang_theme_code}'],['dt','{$lang_theme_dt}'],['dd','{$lang_theme_dd}'],['samp','{$lang_theme_samp}']];html+='<option value="">{$lang_theme_block}</option>';for(var i=0;i<formats.length;i++){for(var x=0;x<lookup.length;x++){if(formats[i]==lookup[x][0])html+='<option value="&lt;'+lookup[x][0]+'&gt;">'+lookup[x][1]+'</option>'}}html+='</select>';return html;case"styleselect":return'<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';case"fontselect":var fontHTML='<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';var iFonts='Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';var nFonts='Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';var fonts=tinyMCE.getParam("theme_advanced_fonts",nFonts).split(';');for(i=0;i<fonts.length;i++){if(fonts[i]!=''){var parts=fonts[i].split('=');fontHTML+='<option value="'+parts[1]+'">'+parts[0]+'</option>'}}fontHTML+='</select>';return fontHTML;case"fontsizeselect":return'<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+'<option value="0">{$lang_theme_font_size}</option>'+'<option value="1">1 (8 pt)</option>'+'<option value="2">2 (10 pt)</option>'+'<option value="3">3 (12 pt)</option>'+'<option value="4">4 (14 pt)</option>'+'<option value="5">5 (18 pt)</option>'+'<option value="6">6 (24 pt)</option>'+'<option value="7">7 (36 pt)</option>'+'</select>';case"|":case"separator":return'<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';case"spacer":return'<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';case"rowseparator":return'<br />'}return""},execCommand:function(editor_id,element,command,user_interface,value){switch(command){case'mceHelp':tinyMCE.openWindow({file:'about.htm',width:480,height:380},{tinymce_version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion,tinymce_releasedate:tinyMCE.releaseDate,inline:"yes"});return true;case"mceLink":var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=inst.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return true}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_href');if(mceRealHref!=""){href=mceRealHref;if(tinyMCE.getParam('convert_urls'))href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);")}action="update"}var template=new Array();template['file']='link.htm';template['width']=310;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);if(inst.settings['insertlink_callback']){var returnVal=eval(inst.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])TinyMCE_AdvancedTheme._insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class'])}else{tinyMCE.openWindow(template,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class,inline:"yes"})}return true;case"mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;var inst=tinyMCE.getInstanceById(editor_id);if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return true;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h)}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:""}src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");mceRealSrc=tinyMCE.getAttrib(img,'mce_src');if(mceRealSrc!=""){src=mceRealSrc;if(tinyMCE.getParam('convert_urls'))src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);")}action="update"}var template=new Array();template['file']='image.htm?src={$src}';template['width']=355;template['height']=265+(tinyMCE.isMSIE?25:0);template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);if(inst.settings['insertimage_callback']){var returnVal=eval(inst.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])TinyMCE_AdvancedTheme._insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout'])}else tinyMCE.openWindow(template,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action,inline:"yes"});return true;case"forecolor":var fcp=new TinyMCE_Layer(editor_id+'_fcPreview',false),p,img,elm;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!fcp.exists()){fcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=fcp.getElement();elm._editor_id=editor_id;elm._command="forecolor";elm._switchId=editor_id+"_forecolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_forecolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));fcp.moveTo(p.absLeft,p.absTop);fcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).foreColor;fcp.show();return false;case"forecolorpicker":this._pickColor(editor_id,'forecolor');return true;case"forecolorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_fcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_text_colors','forecolor'));tinyMCE.switchClass(editor_id+'_forecolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_forecolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"HiliteColor":var bcp=new TinyMCE_Layer(editor_id+'_bcPreview',false),p,img;TinyMCE_AdvancedTheme._hideMenus(editor_id);if(!bcp.exists()){bcp.create('div','mceColorPreview',document.getElementById(editor_id+'_toolbar'));elm=bcp.getElement();elm._editor_id=editor_id;elm._command="HiliteColor";elm._switchId=editor_id+"_backcolor";tinyMCE.addEvent(elm,'click',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseover',TinyMCE_AdvancedTheme._handleMenuEvent);tinyMCE.addEvent(elm,'mouseout',TinyMCE_AdvancedTheme._handleMenuEvent)}img=tinyMCE.selectNodes(document.getElementById(editor_id+"_backcolor"),function(n){return n.nodeName=="IMG"})[0];p=tinyMCE.getAbsPosition(img,document.getElementById(editor_id+'_toolbar'));bcp.moveTo(p.absLeft,p.absTop);bcp.getElement().style.backgroundColor=value!=null?value:tinyMCE.getInstanceById(editor_id).backColor;bcp.show();return false;case"HiliteColorMenu":TinyMCE_AdvancedTheme._hideMenus(editor_id);var ml=new TinyMCE_Layer(editor_id+'_bcMenu');if(!ml.exists())ml.create('div','mceMenu',document.body,TinyMCE_AdvancedTheme._getColorHTML(editor_id,'theme_advanced_background_colors','HiliteColor'));tinyMCE.switchClass(editor_id+'_backcolor','mceMenuButtonFocus');ml.moveRelativeTo(document.getElementById(editor_id+"_backcolor"),'bl');ml.moveBy(tinyMCE.isMSIE&&!tinyMCE.isOpera?-1:1,-1);if(tinyMCE.isOpera)ml.moveBy(0,-2);ml.show();return true;case"backcolorpicker":this._pickColor(editor_id,'HiliteColor');return true;case"mceColorPicker":if(user_interface){var template=[];if(!value['callback']&&!value['color'])value['color']=value['document'].getElementById(value['element_id']).value;template['file']='color_picker.htm';template['width']=380;template['height']=250;template['close_previous']="no";template['width']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height',0);if(typeof(value['store_selection'])=="undefined")value['store_selection']=true;tinyMCE.lastColorPickerValue=value;tinyMCE.openWindow(template,{editor_id:editor_id,mce_store_selection:value['store_selection'],inline:"yes",command:"mceColorPicker",input_color:value['color']})}else{var savedVal=tinyMCE.lastColorPickerValue,elm;if(savedVal['callback']){savedVal['callback'](value);return true}elm=savedVal['document'].getElementById(savedVal['element_id']);elm.value=value;if(elm.onchange!=null&&elm.onchange!='')eval('elm.onchange();')}return true;case"mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_width",720));template['height']=parseInt(tinyMCE.getParam("theme_advanced_source_editor_height",580));tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no",inline:"yes"});return true;case"mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550+(tinyMCE.isOpera?40:0);template['height']=250;template['width']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_charmap_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=90+(tinyMCE.isNS7?30:0);template['width']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_width',0);template['height']+=tinyMCE.getLang('lang_theme_advanced_anchor_delta_height',0);tinyMCE.openWindow(template,{editor_id:editor_id,inline:"yes"});return true;case"mceNewDocument":if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))tinyMCE.execInstanceCommand(editor_id,'mceSetContent',false,' ');return true}return false},getEditorTemplate:function(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array(),skip;for(var i=0;i<in_array.length;i++){skip=false;for(var j=0;j<remove_array.length;j++){if(in_array[i]==remove_array[j]){skip=true}}if(!skip){outArray[outArray.length]=in_array[i]}}return outArray}function addToArray(in_array,add_array){for(var i=0;i<add_array.length;i++){in_array[in_array.length]=add_array[i]}return in_array}var template=new Array();var deltaHeight=0;var resizing=tinyMCE.getParam("theme_advanced_resizing",false);var path=tinyMCE.getParam("theme_advanced_path",true);var statusbarHTML='<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: '+(path?"block":"none")+'">&#160;</div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: '+(resizing?"block":"none")+'" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';var layoutManager=tinyMCE.getParam("theme_advanced_layout_manager","SimpleLayout");var styleSelectHTML='<option value="">{$lang_theme_style_select}</option>';if(settings['theme_advanced_styles']){var stylesAr=settings['theme_advanced_styles'].split(';');for(var i=0;i<stylesAr.length;i++){var key,value;key=stylesAr[i].split('=')[0];value=stylesAr[i].split('=')[1];styleSelectHTML+='<option value="'+value+'">'+key+'</option>'}TinyMCE_AdvancedTheme._autoImportCSSClasses=false}switch(layoutManager){case"SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var statusbarLocation=tinyMCE.getParam("theme_advanced_statusbar_location",pathLocation);var defVals={theme_advanced_buttons1:"bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,separator,sub,sup,separator,charmap"};toolbarHTML+='<a href="#" accesskey="q" title="'+tinyMCE.getLang("lang_toolbar_focus")+'"';if(!tinyMCE.getParam("accessibility_focus"))toolbarHTML+=' onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"';toolbarHTML+='></a>';for(var i=1;i<100;i++){var def=defVals["theme_advanced_buttons"+i];var buttons=tinyMCE.getParam("theme_advanced_buttons"+i,def==null?'':def,true,',');if(buttons.length==0)break;buttons=removeFromArray(buttons,tinyMCE.getParam("theme_advanced_disable","",true,','));buttons=addToArray(buttons,tinyMCE.getParam("theme_advanced_buttons"+i+"_add","",true,','));buttons=addToArray(tinyMCE.getParam("theme_advanced_buttons"+i+"_add_before","",true,','),buttons);for(var b=0;b<buttons.length;b++)toolbarHTML+=tinyMCE.getControlHTML(buttons[b]);if(buttons.length>0){toolbarHTML+="<br />";deltaHeight-=23}}toolbarHTML+='<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\''+editorId+'\').getWin().focus();"></a>';template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';if(toolbarLocation=="top")template['html']+='<tr><td dir="ltr" class="mceToolbarTop" align="'+toolbarAlign+'" height="1" nowrap="nowrap"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(statusbarLocation=="top"){template['html']+='<tr><td class="mceStatusbarTop" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';if(toolbarLocation=="bottom")template['html']+='<tr><td dir="ltr" class="mceToolbarBottom" align="'+toolbarAlign+'" height="1"><span id="'+editorId+'_toolbar" class="mceToolbarContainer">'+toolbarHTML+'</span></td></tr>';if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.applyTemplate(toolbarHTML,{editor_id:editorId});elm.className="mceToolbarExternal";elm.id=editorId+"_toolbar";elm.innerHTML='<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';bod.appendChild(elm);deltaHeight=0;tinyMCE.getInstanceById(editorId).toolbarElement=elm;}else{tinyMCE.getInstanceById(editorId).toolbarElement=null}if(statusbarLocation=="bottom"){template['html']+='<tr><td class="mceStatusbarBottom" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=23}template['html']+='</tbody></table>';break;case"RowLayout":template['html']='<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i<containers.length;i++){if(containers[i]=="mceEditor")template['html']+='<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';else if(containers[i]=="mceElementpath"||containers[i]=="mceStatusbar"){var pathClass="mceStatusbar";if(i==containers.length-1){pathClass="mceStatusbarBottom"}else if(i==0){pathClass="mceStatusbar"}else{deltaHeight-=2}template['html']+='<tr><td class="'+pathClass+'" height="1">'+statusbarHTML+'</td></tr>';deltaHeight-=22}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);curContainer=removeFromArray(curContainer,tinyMCE.getParam("theme_advanced_disable","",true,','));for(var j=0;j<curContainer.length;j++)curContainerHTML+=tinyMCE.getControlHTML(curContainer[j]);if(curContainer.length>0){curContainerHTML+="<br />";deltaHeight-=23}template['html']+='<tr><td class="'+curCSS+'" align="'+curAlign+'" height="1">'+curContainerHTML+'</td></tr>'}}template['html']+='</tbody></table>';break;case"CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);")}break}if(resizing)template['html']+='<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);if(!template['delta_width'])template['delta_width']=0;if(!template['delta_height'])template['delta_height']=deltaHeight;return template},initInstance:function(inst){if(tinyMCE.getParam("theme_advanced_resizing",false)){if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var w=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_width");var h=TinyMCE_AdvancedTheme._getCookie("TinyMCE_"+inst.editorId+"_height");TinyMCE_AdvancedTheme._resizeTo(inst,w,h,tinyMCE.getParam("theme_advanced_resize_horizontal",true))}}inst.addShortcut('ctrl','k','lang_link_desc','mceLink')},removeInstance:function(inst){new TinyMCE_Layer(inst.editorId+'_fcMenu').remove();new TinyMCE_Layer(inst.editorId+'_bcMenu').remove()},hideInstance:function(inst){TinyMCE_AdvancedTheme._hideMenus(inst.editorId)},_handleMenuEvent:function(e){var te=tinyMCE.isMSIE?window.event.srcElement:e.target;tinyMCE._menuButtonEvent(e.type=="mouseover"?"over":"out",document.getElementById(te._switchId));if(e.type=="click")tinyMCE.execInstanceCommand(te._editor_id,te._command)},_hideMenus:function(id){var fcml=new TinyMCE_Layer(id+'_fcMenu'),bcml=new TinyMCE_Layer(id+'_bcMenu');if(fcml.exists()&&fcml.isVisible()){tinyMCE.switchClass(id+'_forecolor','mceMenuButton');fcml.hide()}if(bcml.exists()&&bcml.isVisible()){tinyMCE.switchClass(id+'_backcolor','mceMenuButton');bcml.hide()}},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection,setup_content){var alignNode,breakOut,classNode;function selectByValue(select_elm,value,first_index){first_index=typeof(first_index)=="undefined"?false:true;if(select_elm){for(var i=0;i<select_elm.options.length;i++){var ov=""+select_elm.options[i].value;if(first_index&&ov.toLowerCase().indexOf(value.toLowerCase())==0){select_elm.selectedIndex=i;return true}if(ov==value){select_elm.selectedIndex=i;return true}}}return false};if(node==null)return;var pathElm=document.getElementById(editor_id+"_path");var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();TinyMCE_AdvancedTheme._hideMenus(editor_id);if(pathElm){var parentNode=node;var path=new Array();while(parentNode!=null){if(parentNode.nodeName.toUpperCase()=="BODY"){break}if(parentNode.nodeType==1&&tinyMCE.getAttrib(parentNode,"class").indexOf('mceItemHidden')==-1){path[path.length]=parentNode}parentNode=parentNode.parentNode}var html="";for(var i=path.length-1;i>=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName.indexOf("html:")==0)nodeName=nodeName.substring(5);if(nodeName=="b"){nodeName="strong"}if(nodeName=="i"){nodeName="em"}if(nodeName=="span"){var cn=tinyMCE.getAttrib(path[i],"class");if(cn!=""&&cn.indexOf('mceItem')==-1)nodeData+="class: "+cn+" ";var st=tinyMCE.getAttrib(path[i],"style");if(st!=""){st=tinyMCE.serializeStyle(tinyMCE.parseStyle(st));nodeData+="style: "+tinyMCE.xmlEncode(st)+" "}}if(nodeName=="font"){if(tinyMCE.getParam("convert_fonts_to_spans"))nodeName="span";var face=tinyMCE.getAttrib(path[i],"face");if(face!="")nodeData+="font: "+tinyMCE.xmlEncode(face)+" ";var size=tinyMCE.getAttrib(path[i],"size");if(size!="")nodeData+="size: "+tinyMCE.xmlEncode(size)+" ";var color=tinyMCE.getAttrib(path[i],"color");if(color!="")nodeData+="color: "+tinyMCE.xmlEncode(color)+" "}if(tinyMCE.getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" "}var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1)nodeData+="class: "+className+" ";if(tinyMCE.getAttrib(path[i],'src')!=""){var src=tinyMCE.getAttrib(path[i],"mce_src");if(src=="")src=tinyMCE.getAttrib(path[i],"src");nodeData+="src: "+tinyMCE.xmlEncode(src)+" "}if(path[i].nodeName=='A'&&tinyMCE.getAttrib(path[i],'href')!=""){var href=tinyMCE.getAttrib(path[i],"mce_href");if(href=="")href=tinyMCE.getAttrib(path[i],"href");nodeData+="href: "+tinyMCE.xmlEncode(href)+" "}className=tinyMCE.getAttrib(path[i],"class");if((nodeName=="img"||nodeName=="span")&&className.indexOf('mceItem')!=-1){nodeName=className.replace(/mceItem([a-z]+)/gi,'$1').toLowerCase();nodeData=path[i].getAttribute('title')}if(nodeName=="a"&&(anchor=tinyMCE.getAttrib(path[i],"name"))!=""){nodeName="a";nodeName+="#"+tinyMCE.xmlEncode(anchor);nodeData=""}if(tinyMCE.getAttrib(path[i],'name').indexOf("mce_")!=0){var className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i],"class"),false);if(className!=""&&className.indexOf('mceItem')==-1){nodeName+="."+className}}var cmd='tinyMCE.execInstanceCommand(\''+editor_id+'\',\'mceSelectNodeDepth\',false,\''+i+'\');';html+='<a title="'+nodeData+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" target="_self" class="mcePathItem">'+nodeName+'</a>';if(i>0){html+=" &raquo; "}}pathElm.innerHTML='<a href="#" accesskey="x"></a>'+tinyMCE.getLang('lang_theme_path')+": "+html+'&#160;'}tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClass(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClass(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClass(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClass(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClass(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClass(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClass(editor_id+'_link','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_unlink','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_outdent','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_image','mceButtonNormal');tinyMCE.switchClass(editor_id+'_hr','mceButtonNormal');if(node.nodeName=="A"&&tinyMCE.getAttrib(node,"class").indexOf('mceItemAnchor')!=-1)tinyMCE.switchClass(editor_id+'_anchor','mceButtonSelected');var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClass(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal');tinyMCE.switchClass(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal')}tinyMCE.switchClass(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal');if(undo_levels!=-1){tinyMCE.switchClass(editor_id+'_undo','mceButtonDisabled');tinyMCE.switchClass(editor_id+'_redo','mceButtonDisabled')}if(tinyMCE.getParentElement(node,"li,blockquote"))tinyMCE.switchClass(editor_id+'_outdent','mceButtonNormal');if(undo_index!=-1&&(undo_index<undo_levels-1&&undo_levels>0))tinyMCE.switchClass(editor_id+'_redo','mceButtonNormal');if(undo_index!=-1&&(undo_index>0&&undo_levels>0))tinyMCE.switchClass(editor_id+'_undo','mceButtonNormal');var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i<selectElm.options.length;i++){if(selectElm.options[i].value==classNode.className){index=i;breakOut=true;break}}}}while(!breakOut&&classNode!=null&&(classNode=classNode.parentNode)!=null);selectElm.selectedIndex=index}var selectElm=document.getElementById(editor_id+"_formatSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"p,div,h1,h2,h3,h4,h5,h6,pre,address");if(elm)selectByValue(selectElm,"<"+elm.nodeName.toLowerCase()+">");else selectByValue(selectElm,"")}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){if(!tinyMCE.isSafari&&!(tinyMCE.isMSIE&&!tinyMCE.isOpera)){var face=inst.queryCommandValue('FontName');face=face==null||face==""?"":face;selectByValue(selectElm,face,face!="")}else{var elm=tinyMCE.getParentElement(node,"font","face");if(elm){var family=tinyMCE.getAttrib(elm,"face");if(family=='')family=''+elm.style.fontFamily;if(!selectByValue(selectElm,family,family!=""))selectByValue(selectElm,"")}else selectByValue(selectElm,"")}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){if(!tinyMCE.isSafari&&!tinyMCE.isOpera){var size=inst.queryCommandValue('FontSize');selectByValue(selectElm,size==null||size==""?"0":size)}else{var elm=tinyMCE.getParentElement(node,"font","size");if(elm){var size=tinyMCE.getAttrib(elm,"size");if(size==''){var sizes=new Array('','8px','10px','12px','14px','18px','24px','36px');size=''+elm.style.fontSize;for(var i=0;i<sizes.length;i++){if((''+sizes[i])==size){size=i;break}}}if(!selectByValue(selectElm,size))selectByValue(selectElm,"")}else selectByValue(selectElm,"0")}}alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align'))continue;switch(alignNode.getAttribute('align').toLowerCase()){case"left":tinyMCE.switchClass(editor_id+'_justifyleft','mceButtonSelected');breakOut=true;break;case"right":tinyMCE.switchClass(editor_id+'_justifyright','mceButtonSelected');breakOut=true;break;case"middle":case"center":tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');breakOut=true;break;case"justify":tinyMCE.switchClass(editor_id+'_justifyfull','mceButtonSelected');breakOut=true;break}}while(!breakOut&&(alignNode=alignNode.parentNode)!=null);var div=tinyMCE.getParentElement(node,"div");if(div&&div.style.textAlign=="center")tinyMCE.switchClass(editor_id+'_justifycenter','mceButtonSelected');if(!setup_content){var ar=new Array("Bold","_bold","Italic","_italic","Strikethrough","_strikethrough","superscript","_sup","subscript","_sub");for(var i=0;i<ar.length;i+=2){if(inst.queryCommandState(ar[i]))tinyMCE.switchClass(editor_id+ar[i+1],'mceButtonSelected')}if(inst.queryCommandState("Underline")&&(node.parentNode==null||node.parentNode.nodeName!="A"))tinyMCE.switchClass(editor_id+'_underline','mceButtonSelected')}do{switch(node.nodeName){case"UL":tinyMCE.switchClass(editor_id+'_bullist','mceButtonSelected');break;case"OL":tinyMCE.switchClass(editor_id+'_numlist','mceButtonSelected');break;case"HR":tinyMCE.switchClass(editor_id+'_hr','mceButtonSelected');break;case"IMG":if(tinyMCE.getAttrib(node,'name').indexOf('mce_')!=0&&tinyMCE.getAttrib(node,'class').indexOf('mceItem')==-1){tinyMCE.switchClass(editor_id+'_image','mceButtonSelected')}break}}while((node=node.parentNode)!=null)},_setupCSSClasses:function(editor_id){var i,selectElm;if(!TinyMCE_AdvancedTheme._autoImportCSSClasses)return;selectElm=document.getElementById(editor_id+'_styleSelect');if(selectElm&&selectElm.getAttribute('cssImported')!='true'){var csses=tinyMCE.getCSSClasses(editor_id);if(csses&&selectElm){for(i=0;i<csses.length;i++)selectElm.options[selectElm.options.length]=new Option(csses[i],csses[i])}if(csses!=null&&csses.length>0)selectElm.setAttribute('cssImported','true')}},_setCookie:function(name,value,expires,path,domain,secure){var curCookie=name+"="+escape(value)+((expires)?"; expires="+expires.toGMTString():"")+((path)?"; path="+escape(path):"")+((domain)?"; domain="+domain:"")+((secure)?"; secure":"");document.cookie=curCookie},_getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0)return null}else begin+=2;var end=document.cookie.indexOf(";",begin);if(end==-1)end=dc.length;return unescape(dc.substring(begin+prefix.length,end))},_resizeTo:function(inst,w,h,set_w){var editorContainer=document.getElementById(inst.editorId+'_parent');var tableElm=editorContainer.firstChild;var iframe=inst.iframeElement;if(w==null||w=="null"){set_w=false;w=0}if(h==null||h=="null")return;w=parseInt(w);h=parseInt(h);if(tinyMCE.isGecko){w+=2;h+=2}var dx=w-tableElm.clientWidth;var dy=h-tableElm.clientHeight;w=w<1?30:w;h=h<1?30:h;if(set_w)tableElm.style.width=w+"px";tableElm.style.height=h+"px";iw=iframe.clientWidth+dx;ih=iframe.clientHeight+dy;iw=iw<1?30:iw;ih=ih<1?30:ih;if(tinyMCE.isGecko){iw-=2;ih-=2}if(set_w)iframe.style.width=iw+"px";iframe.style.height=ih+"px";if(set_w){var tableBodyElm=tableElm.firstChild;var minIframeWidth=tableBodyElm.scrollWidth;if(inst.iframeElement.clientWidth<minIframeWidth){dx=minIframeWidth-inst.iframeElement.clientWidth;inst.iframeElement.style.width=(iw+dx)+"px"}}inst.useCSS=false},_resizeEventHandler:function(e){var resizer=TinyMCE_AdvancedTheme._resizer;if(!resizer.resizing)return;e=typeof(e)=="undefined"?window.event:e;var dx=e.screenX-resizer.downX;var dy=e.screenY-resizer.downY;var resizeBox=resizer.resizeBox;var editorId=resizer.editorId;switch(e.type){case"mousemove":var w,h;w=resizer.width+dx;h=resizer.height+dy;w=w<1?1:w;h=h<1?1:h;if(resizer.horizontal)resizeBox.style.width=w+"px";resizeBox.style.height=h+"px";break;case"mouseup":TinyMCE_AdvancedTheme._setResizing(e,editorId,false);TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId),resizer.width+dx,resizer.height+dy,resizer.horizontal);if(tinyMCE.getParam("theme_advanced_resizing_use_cookie",true)){var expires=new Date();expires.setTime(expires.getTime()+3600000*24*30);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_width",""+(resizer.horizontal?resizer.width+dx:""),expires);TinyMCE_AdvancedTheme._setCookie("TinyMCE_"+editorId+"_height",""+(resizer.height+dy),expires)}break}},_setResizing:function(e,editor_id,state){e=typeof(e)=="undefined"?window.event:e;var resizer=TinyMCE_AdvancedTheme._resizer;var editorContainer=document.getElementById(editor_id+'_parent');var editorArea=document.getElementById(editor_id+'_parent').firstChild;var resizeBox=document.getElementById(editor_id+'_resize_box');var inst=tinyMCE.getInstanceById(editor_id);if(state){var width=editorArea.clientWidth;var height=editorArea.clientHeight;resizeBox.style.width=width+"px";resizeBox.style.height=height+"px";resizer.iframeWidth=inst.iframeElement.clientWidth;resizer.iframeHeight=inst.iframeElement.clientHeight;editorArea.style.display="none";resizeBox.style.display="block";if(!resizer.eventHandlers){if(tinyMCE.isMSIE)tinyMCE.addEvent(document,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);else tinyMCE.addEvent(window,"mousemove",TinyMCE_AdvancedTheme._resizeEventHandler);tinyMCE.addEvent(document,"mouseup",TinyMCE_AdvancedTheme._resizeEventHandler);resizer.eventHandlers=true}resizer.resizing=true;resizer.downX=e.screenX;resizer.downY=e.screenY;resizer.width=parseInt(resizeBox.style.width);resizer.height=parseInt(resizeBox.style.height);resizer.editorId=editor_id;resizer.resizeBox=resizeBox;resizer.horizontal=tinyMCE.getParam("theme_advanced_resize_horizontal",true)}else{resizer.resizing=false;resizeBox.style.display="none";editorArea.style.display=tinyMCE.isMSIE&&!tinyMCE.isOpera?"block":"table";tinyMCE.execCommand('mceResetDesignMode')}},_getColorHTML:function(id,n,cm){var i,h,cl;h='<span class="mceMenuLine"></span>';cl=tinyMCE.getParam(n,TinyMCE_AdvancedTheme._defColors).split(',');h+='<table class="mceColors"><tr>';for(i=0;i<cl.length;i++){c='tinyMCE.execInstanceCommand(\''+id+'\', \''+cm+'\', false, \'#'+cl[i]+'\');';h+='<td><a href="javascript:'+c+'" style="background-color: #'+cl[i]+'" onclick="'+c+';return false;"></a></td>';if((i+1)%8==0)h+='</tr><tr>'}h+='</tr></table>';if(tinyMCE.getParam("theme_advanced_more_colors",true))h+='<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\''+id+'\',\''+cm+'\');" class="mceMoreColors">'+tinyMCE.getLang('lang_more_colors')+'</a>';return h},_pickColor:function(id,cm){var inputColor,inst=tinyMCE.selectedInstance;if(cm=='forecolor'&&inst)inputColor=inst.foreColor;if((cm=='backcolor'||cm=='HiliteColor')&&inst)inputColor=inst.backColor;tinyMCE.execCommand('mceColorPicker',true,{color:inputColor,callback:function(c){tinyMCE.execInstanceCommand(id,cm,false,c)}})},_insertImage:function(src,alt,border,hspace,vspace,width,height,align,title,onmouseover,onmouseout){tinyMCE.execCommand("mceInsertContent",false,tinyMCE.createTagHTML('img',{src:tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'],src),mce_src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout}))},_insertLink:function(href,target,title,onclick,style_class){tinyMCE.execCommand('mceBeginUndoLevel');if(tinyMCE.selectedInstance&&tinyMCE.selectedElement&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){var doc=tinyMCE.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true}var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(linkElement,'href',thref);tinyMCE.setAttrib(linkElement,'mce_href',mhref);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));tinyMCE.selectedElement.parentNode.replaceChild(linkElement,tinyMCE.selectedElement)}return}if(!tinyMCE.linkElement&&tinyMCE.selectedInstance){if(tinyMCE.isSafari){tinyMCE.execCommand("mceInsertContent",false,'<a href="'+tinyMCE.uniqueURL+'">'+tinyMCE.selectedInstance.selection.getSelectedHTML()+'</a>')}else tinyMCE.selectedInstance.contentDocument.execCommand("createlink",false,tinyMCE.uniqueURL);tinyMCE.linkElement=tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);var elementArray=tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body,"a","href",tinyMCE.uniqueURL);for(var i=0;i<elementArray.length;i++){var mhref=href;var thref=eval(tinyMCE.settings['urlconverter_callback']+"(href, elementArray[i]);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(elementArray[i],'href',thref);tinyMCE.setAttrib(elementArray[i],'mce_href',mhref);tinyMCE.setAttrib(elementArray[i],'target',target);tinyMCE.setAttrib(elementArray[i],'title',title);tinyMCE.setAttrib(elementArray[i],'onclick',onclick);tinyMCE.setAttrib(elementArray[i],'class',style_class)}tinyMCE.linkElement=elementArray[0]}if(tinyMCE.linkElement){var mhref=href;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement);");mhref=tinyMCE.getParam('convert_urls')?href:mhref;tinyMCE.setAttrib(tinyMCE.linkElement,'href',href);tinyMCE.setAttrib(tinyMCE.linkElement,'mce_href',mhref);tinyMCE.setAttrib(tinyMCE.linkElement,'target',target);tinyMCE.setAttrib(tinyMCE.linkElement,'title',title);tinyMCE.setAttrib(tinyMCE.linkElement,'onclick',onclick);tinyMCE.setAttrib(tinyMCE.linkElement,'class',style_class)}tinyMCE.execCommand('mceEndUndoLevel')}};tinyMCE.addTheme("advanced",TinyMCE_AdvancedTheme);tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,each=tinymce.each,Cookie=tinymce.util.Cookie,lastExtID,explode=tinymce.explode;tinymce.ThemeManager.requireLangPack('advanced');tinymce.create('tinymce.themes.AdvancedTheme',{controls:{bold:['bold_desc','Bold'],italic:['italic_desc','Italic'],underline:['underline_desc','Underline'],strikethrough:['striketrough_desc','Strikethrough'],justifyleft:['justifyleft_desc','JustifyLeft'],justifycenter:['justifycenter_desc','JustifyCenter'],justifyright:['justifyright_desc','JustifyRight'],justifyfull:['justifyfull_desc','JustifyFull'],bullist:['bullist_desc','InsertUnorderedList'],numlist:['numlist_desc','InsertOrderedList'],outdent:['outdent_desc','Outdent'],indent:['indent_desc','Indent'],cut:['cut_desc','Cut'],copy:['copy_desc','Copy'],paste:['paste_desc','Paste'],undo:['undo_desc','Undo'],redo:['redo_desc','Redo'],link:['link_desc','mceLink'],unlink:['unlink_desc','unlink'],image:['image_desc','mceImage'],cleanup:['cleanup_desc','mceCleanup'],help:['help_desc','mceHelp'],code:['code_desc','mceCodeEditor'],hr:['hr_desc','InsertHorizontalRule'],removeformat:['removeformat_desc','RemoveFormat'],sub:['sub_desc','subscript'],sup:['sup_desc','superscript'],forecolor:['forecolor_desc','ForeColor'],forecolorpicker:['forecolor_desc','mceForeColor'],backcolor:['backcolor_desc','HiliteColor'],backcolorpicker:['backcolor_desc','mceBackColor'],charmap:['charmap_desc','mceCharMap'],visualaid:['visualaid_desc','mceToggleVisualAid'],anchor:['anchor_desc','mceInsertAnchor'],newdocument:['newdocument_desc','mceNewDocument'],blockquote:['blockquote_desc','mceBlockQuote']},stateControls:['bold','italic','underline','strikethrough','bullist','numlist','justifyleft','justifycenter','justifyright','justifyfull','sub','sup','blockquote'],init:function(ed,url){var t=this,s,v;t.editor=ed;t.url=url;t.onResolveName=new tinymce.util.Dispatcher(this);t.settings=s=extend({theme_advanced_path:true,theme_advanced_toolbar_location:'bottom',theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_font_sizes:"1,2,3,4,5,6,7",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1},ed.settings);if((v=s.theme_advanced_path_location)&&v!='none')s.theme_advanced_statusbar_location=s.theme_advanced_path_location;if(s.theme_advanced_statusbar_location=='none')s.theme_advanced_statusbar_location=0;ed.onInit.add(function(){ed.onNodeChange.add(t._nodeChanged,t);if(ed.settings.content_css!==false)ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/"+ed.settings.skin+"/content.css"));});ed.onSetProgressState.add(function(ed,b,ti){var co,id=ed.id,tb;if(b){t.progressTimer=setTimeout(function(){co=ed.getContainer();co=co.insertBefore(DOM.create('DIV',{style:'position:relative'}),co.firstChild);tb=DOM.get(ed.id+'_tbl');DOM.add(co,'div',{id:id+'_blocker','class':'mceBlocker',style:{width:tb.clientWidth+2,height:tb.clientHeight+2}});DOM.add(co,'div',{id:id+'_progress','class':'mceProgress',style:{left:tb.clientWidth/ 2, top : tb.clientHeight /2}});},ti||0);}else{DOM.remove(id+'_blocker');DOM.remove(id+'_progress');clearTimeout(t.progressTimer);}});DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css||"themes/advanced/skins/"+ed.settings.skin+"/ui.css"));if(s.skin_variant)DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css||"themes/advanced/skins/"+ed.settings.skin+"/ui_"+s.skin_variant+".css"));},createControl:function(n,cf){var cd,c;if(c=cf.createControl(n))return c;switch(n){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu();}if((cd=this.controls[n]))return cf.createButton(n,{title:"advanced."+cd[0],cmd:cd[1],ui:cd[2],value:cd[3]});},execCommand:function(cmd,ui,val){var f=this['_'+cmd];if(f){f.call(this,ui,val);return true;}return false;},_importClasses:function(){var ed=this.editor,c=ed.controlManager.get('styleselect');if(c.getLength()==0){each(ed.dom.getClasses(),function(o){c.add(o['class'],o['class']);});}},_createStyleSelect:function(n){var t=this,ed=t.editor,cf=ed.controlManager,c=cf.createListBox('styleselect',{title:'advanced.style_select',onselect:function(v){if(c.selectedValue===v){ed.execCommand('mceSetStyleInfo',0,{command:'removeformat'});c.select();return false;}else ed.execCommand('mceSetCSSClass',0,v);}});if(c){each(ed.getParam('theme_advanced_styles','','hash'),function(v,k){if(v)c.add(t.editor.translate(k),v);});c.onPostRender.add(function(ed,n){Event.add(n,'focus',t._importClasses,t);Event.add(n,'mousedown',t._importClasses,t);});}return c;},_createFontSelect:function(){var c,t=this,ed=t.editor;c=ed.controlManager.createListBox('fontselect',{title:'advanced.fontdefault',cmd:'FontName'});if(c){each(ed.getParam('theme_advanced_fonts',t.settings.theme_advanced_fonts,'hash'),function(v,k){c.add(ed.translate(k),v,{style:v.indexOf('dings')==-1?'font-family:'+v:''});});}return c;},_createFontSizeSelect:function(){var c,t=this,lo=["1 (8 pt)","2 (10 pt)","3 (12 pt)","4 (14 pt)","5 (18 pt)","6 (24 pt)","7 (36 pt)"],fz=[8,10,12,14,18,24,36];c=t.editor.controlManager.createListBox('fontsizeselect',{title:'advanced.font_size',cmd:'FontSize'});if(c){each(explode(t.settings.theme_advanced_font_sizes),function(v){c.add(lo[parseInt(v)-1],v,{'style':'font-size:'+fz[v-1]+'pt','class':'mceFontSize'+v});});}return c;},_createBlockFormats:function(){var c,fmts={p:'advanced.paragraph',address:'advanced.address',pre:'advanced.pre',h1:'advanced.h1',h2:'advanced.h2',h3:'advanced.h3',h4:'advanced.h4',h5:'advanced.h5',h6:'advanced.h6',div:'advanced.div',blockquote:'advanced.blockquote',code:'advanced.code',dt:'advanced.dt',dd:'advanced.dd',samp:'advanced.samp'},t=this;c=t.editor.controlManager.createListBox('formatselect',{title:'advanced.block',cmd:'FormatBlock'});if(c){each(t.editor.getParam('theme_advanced_blockformats',t.settings.theme_advanced_blockformats,'hash'),function(v,k){c.add(t.editor.translate(k!=v?k:fmts[v]),v,{'class':'mce_formatPreview mce_'+v});});}return c;},_createForeColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_text_colors)o.colors=v;o.title='advanced.forecolor_desc';o.cmd='ForeColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('forecolor',o);return c;},_createBackColorMenu:function(){var c,t=this,s=t.settings,o={},v;if(s.theme_advanced_more_colors){o.more_colors_func=function(){t._mceColorPicker(0,{color:c.value,func:function(co){c.setColor(co);}});};}if(v=s.theme_advanced_background_colors)o.colors=v;o.title='advanced.backcolor_desc';o.cmd='HiliteColor';o.scope=this;c=t.editor.controlManager.createColorSplitButton('backcolor',o);return c;},renderUI:function(o){var n,ic,tb,t=this,ed=t.editor,s=t.settings,sc,p,nl;n=p=DOM.create('span',{id:ed.id+'_parent','class':'mceEditor '+ed.settings.skin+'Skin'+(s.skin_variant?' '+ed.settings.skin+'Skin'+t._ufirst(s.skin_variant):'')});if(!DOM.boxModel)n=DOM.add(n,'div',{'class':'mceOldBoxModel'});n=sc=DOM.add(n,'table',{id:ed.id+'_tbl','class':'mceLayout',cellSpacing:0,cellPadding:0});n=tb=DOM.add(n,'tbody');switch((s.theme_advanced_layout_manager||'').toLowerCase()){case"rowlayout":ic=t._rowLayout(s,tb,o);break;case"customlayout":ic=ed.execCallback("theme_advanced_custom_layout",s,tb,o,p);break;default:ic=t._simpleLayout(s,tb,o,p);}n=o.targetNode;nl=DOM.stdMode?sc.getElementsByTagName('tr'):sc.rows;DOM.addClass(nl[0],'mceFirst');DOM.addClass(nl[nl.length-1],'mceLast');each(DOM.select('tr',tb),function(n){DOM.addClass(n.firstChild,'mceFirst');DOM.addClass(n.childNodes[n.childNodes.length-1],'mceLast');});if(DOM.get(s.theme_advanced_toolbar_container))DOM.get(s.theme_advanced_toolbar_container).appendChild(p);else DOM.insertAfter(p,n);Event.add(ed.id+'_path_row','click',function(e){e=e.target;if(e.nodeName=='A'){t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/,'$1'));return Event.cancel(e);}});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))Event.add(DOM.add(p,'a',{href:'#'},'<!-- IE -->'),'focus',function(){tinyMCE.get(ed.id).focus();});if(s.theme_advanced_toolbar_location=='external')o.deltaHeight=0;t.deltaHeight=o.deltaHeight;o.targetNode=null;return{iframeContainer:ic,editorContainer:ed.id+'_parent',sizeContainer:sc,deltaHeight:o.deltaHeight};},getInfo:function(){return{longname:'Advanced theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}},resizeBy:function(dw,dh){var e=DOM.get(this.editor.id+'_tbl');this.resizeTo(e.clientWidth+dw,e.clientHeight+dh);},resizeTo:function(w,h){var ed=this.editor,s=ed.settings,e=DOM.get(ed.id+'_tbl'),ifr=DOM.get(ed.id+'_ifr'),dh;w=Math.max(s.theme_advanced_resizing_min_width||100,w);h=Math.max(s.theme_advanced_resizing_min_height||100,h);w=Math.min(s.theme_advanced_resizing_max_width||0xFFFF,w);h=Math.min(s.theme_advanced_resizing_max_height||0xFFFF,h);dh=e.clientHeight-ifr.clientHeight;DOM.setStyle(ifr,'height',h-dh);DOM.setStyles(e,{width:w,height:h});},destroy:function(){var id=this.editor.id;Event.clear(id+'_resize');Event.clear(id+'_path_row');Event.clear(id+'_external_close');},_simpleLayout:function(s,tb,o,p){var t=this,ed=t.editor,lo=s.theme_advanced_toolbar_location,sl=s.theme_advanced_statusbar_location,n,ic,etb,c;if(lo=='top')t._addToolbars(tb,o);if(lo=='external'){n=c=DOM.create('div',{style:'position:relative'});n=DOM.add(n,'div',{id:ed.id+'_external','class':'mceExternalToolbar'});DOM.add(n,'a',{id:ed.id+'_external_close',href:'javascript:;','class':'mceExternalClose'});n=DOM.add(n,'table',{id:ed.id+'_tblext',cellSpacing:0,cellPadding:0});etb=DOM.add(n,'tbody');if(p.firstChild.className=='mceOldBoxModel')p.firstChild.appendChild(c);else p.insertBefore(c,p.firstChild);t._addToolbars(etb,o);ed.onMouseUp.add(function(){var e=DOM.get(ed.id+'_external');DOM.show(e);DOM.hide(lastExtID);var f=Event.add(ed.id+'_external_close','click',function(){DOM.hide(ed.id+'_external');Event.remove(ed.id+'_external_close','click',f);});DOM.show(e);DOM.setStyle(e,'top',0-DOM.getRect(ed.id+'_tblext').h-1);DOM.hide(e);DOM.show(e);e.style.filter='';lastExtID=ed.id+'_external';e=null;});}if(sl=='top')t._addStatusBar(tb,o);if(!s.theme_advanced_toolbar_container){n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});}if(lo=='bottom')t._addToolbars(tb,o);if(sl=='bottom')t._addStatusBar(tb,o);return ic;},_rowLayout:function(s,tb,o){var t=this,ed=t.editor,dc,da,cf=ed.controlManager,n,ic,to,a;dc=s.theme_advanced_containers_default_class||'';da=s.theme_advanced_containers_default_align||'center';each(explode(s.theme_advanced_containers||''),function(c,i){var v=s['theme_advanced_container_'+c]||'';switch(c.toLowerCase()){case'mceeditor':n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});break;case'mceelementpath':t._addStatusBar(tb,o);break;default:a=s['theme_advanced_container_'+c+'_align'].toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(tb,'tr'),'td',{'class':'mceToolbar '+(s['theme_advanced_container_'+c+'_class']||dc)+' '+a||da});to=cf.createToolbar("toolbar"+i);t._addControls(v,to);DOM.setHTML(n,to.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}});return ic;},_addControls:function(v,tb){var t=this,s=t.settings,di,cf=t.editor.controlManager;if(s.theme_advanced_disable&&!t._disabled){di={};each(explode(s.theme_advanced_disable),function(v){di[v]=1;});t._disabled=di;}else di=t._disabled;each(explode(v),function(n){var c;if(di&&di[n])return;if(n=='tablecontrols'){each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(n){n=t.createControl(n,cf);if(n)tb.add(n);});return;}c=t.createControl(n,cf);if(c)tb.add(c);});},_addToolbars:function(c,o){var t=this,i,tb,ed=t.editor,s=t.settings,v,cf=ed.controlManager,di,n,h=[],a;a=s.theme_advanced_toolbar_align.toLowerCase();a='mce'+t._ufirst(a);n=DOM.add(DOM.add(c,'tr'),'td',{'class':'mceToolbar '+a});if(!ed.getParam('accessibility_focus')||ed.getParam('tab_focus'))h.push(DOM.createHTML('a',{href:'#',onfocus:'tinyMCE.get(\''+ed.id+'\').focus();'},'<!-- IE -->'));h.push(DOM.createHTML('a',{href:'#',accesskey:'q',title:ed.getLang("advanced.toolbar_focus")},'<!-- IE -->'));for(i=1;(v=s['theme_advanced_buttons'+i]);i++){tb=cf.createToolbar("toolbar"+i,{'class':'mceToolbarRow'+i});if(s['theme_advanced_buttons'+i+'_add'])v+=','+s['theme_advanced_buttons'+i+'_add'];if(s['theme_advanced_buttons'+i+'_add_before'])v=s['theme_advanced_buttons'+i+'_add_before']+','+v;t._addControls(v,tb);h.push(tb.renderHTML());o.deltaHeight-=s.theme_advanced_row_height;}h.push(DOM.createHTML('a',{href:'#',accesskey:'z',title:ed.getLang("advanced.toolbar_focus"),onfocus:'tinyMCE.getInstanceById(\''+ed.id+'\').focus();'},'<!-- IE -->'));DOM.setHTML(n,h.join(''));},_addStatusBar:function(tb,o){var n,t=this,ed=t.editor,s=t.settings,r,mf,me,td;n=DOM.add(tb,'tr');n=td=DOM.add(n,'td',{'class':'mceStatusbar'});n=DOM.add(n,'div',{id:ed.id+'_path_row'},s.theme_advanced_path?ed.translate('advanced.path')+': ':'&nbsp;');DOM.add(n,'a',{href:'#',accesskey:'x'});if(s.theme_advanced_resizing&&!tinymce.isOldWebKit){DOM.add(td,'a',{id:ed.id+'_resize',href:'javascript:;',onclick:"return false;",'class':'mceResize'});if(s.theme_advanced_resizing_use_cookie){ed.onPostRender.add(function(){var o=Cookie.getHash("TinyMCE_"+ed.id+"_size"),c=DOM.get(ed.id+'_tbl');if(!o)return;if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,o.cw)+'px';c.style.height=Math.max(10,o.ch)+'px';DOM.get(ed.id+'_ifr').style.height=Math.max(10,parseInt(o.ch)+t.deltaHeight)+'px';});}ed.onPostRender.add(function(){Event.add(ed.id+'_resize','mousedown',function(e){var c,p,w,h,n,pa;c=DOM.get(ed.id+'_tbl');w=c.clientWidth;h=c.clientHeight;miw=s.theme_advanced_resizing_min_width||100;mih=s.theme_advanced_resizing_min_height||100;maw=s.theme_advanced_resizing_max_width||0xFFFF;mah=s.theme_advanced_resizing_max_height||0xFFFF;p=DOM.add(DOM.get(ed.id+'_parent'),'div',{'class':'mcePlaceHolder'});DOM.setStyles(p,{width:w,height:h});DOM.hide(c);DOM.show(p);r={x:e.screenX,y:e.screenY,w:w,h:h,dx:null,dy:null};mf=Event.add(DOM.doc,'mousemove',function(e){var w,h;r.dx=e.screenX-r.x;r.dy=e.screenY-r.y;w=Math.max(miw,r.w+r.dx);h=Math.max(mih,r.h+r.dy);w=Math.min(maw,w);h=Math.min(mah,h);if(s.theme_advanced_resize_horizontal)p.style.width=w+'px';p.style.height=h+'px';return Event.cancel(e);});me=Event.add(DOM.doc,'mouseup',function(e){var ifr;Event.remove(DOM.doc,'mousemove',mf);Event.remove(DOM.doc,'mouseup',me);c.style.display='';DOM.remove(p);if(r.dx===null)return;ifr=DOM.get(ed.id+'_ifr');if(s.theme_advanced_resize_horizontal)c.style.width=Math.max(10,r.w+r.dx)+'px';c.style.height=Math.max(10,r.h+r.dy)+'px';ifr.style.height=Math.max(10,ifr.clientHeight+r.dy)+'px';if(s.theme_advanced_resizing_use_cookie){Cookie.setHash("TinyMCE_"+ed.id+"_size",{cw:r.w+r.dx,ch:r.h+r.dy});}});return Event.cancel(e);});});}o.deltaHeight-=21;n=tb=null;},_nodeChanged:function(ed,cm,n,co){var t=this,p,de=0,v,c,s=t.settings;tinymce.each(t.stateControls,function(c){cm.setActive(c,ed.queryCommandState(t.controls[c][1]));});cm.setActive('visualaid',ed.hasVisual);cm.setDisabled('undo',!ed.undoManager.hasUndo()&&!ed.typing);cm.setDisabled('redo',!ed.undoManager.hasRedo());cm.setDisabled('outdent',!ed.queryCommandState('Outdent'));p=DOM.getParent(n,'A');if(c=cm.get('link')){if(!p||!p.name){c.setDisabled(!p&&co);c.setActive(!!p);}}if(c=cm.get('unlink')){c.setDisabled(!p&&co);c.setActive(!!p&&!p.name);}if(c=cm.get('anchor')){c.setActive(!!p&&p.name);if(tinymce.isWebKit){p=DOM.getParent(n,'IMG');c.setActive(!!p&&DOM.getAttrib(p,'mce_name')=='a');}}p=DOM.getParent(n,'IMG');if(c=cm.get('image'))c.setActive(!!p&&n.className.indexOf('mceItem')==-1);if(c=cm.get('styleselect')){if(n.className){t._importClasses();c.select(n.className);}else c.select();}if(c=cm.get('formatselect')){p=DOM.getParent(n,DOM.isBlock);if(p)c.select(p.nodeName.toLowerCase());}if(c=cm.get('fontselect'))c.select(ed.queryCommandValue('FontName'));if(c=cm.get('fontsizeselect'))c.select(ed.queryCommandValue('FontSize'));if(s.theme_advanced_path&&s.theme_advanced_statusbar_location){p=DOM.get(ed.id+'_path')||DOM.add(ed.id+'_path_row','span',{id:ed.id+'_path'});DOM.setHTML(p,'');ed.dom.getParent(n,function(n){var na=n.nodeName.toLowerCase(),u,pi,ti='';if(n.nodeType!=1||(DOM.hasClass(n,'mceItemHidden')||DOM.hasClass(n,'mceItemRemoved')))return;if(v=DOM.getAttrib(n,'mce_name'))na=v;if(tinymce.isIE&&n.scopeName!=='HTML')na=n.scopeName+':'+na;na=na.replace(/mce\:/g,'');switch(na){case'b':na='strong';break;case'i':na='em';break;case'img':if(v=DOM.getAttrib(n,'src'))ti+='src: '+v+' ';break;case'a':if(v=DOM.getAttrib(n,'name')){ti+='name: '+v+' ';na+='#'+v;}if(v=DOM.getAttrib(n,'href'))ti+='href: '+v+' ';break;case'font':if(s.convert_fonts_to_spans)na='span';if(v=DOM.getAttrib(n,'face'))ti+='font: '+v+' ';if(v=DOM.getAttrib(n,'size'))ti+='size: '+v+' ';if(v=DOM.getAttrib(n,'color'))ti+='color: '+v+' ';break;case'span':if(v=DOM.getAttrib(n,'style'))ti+='style: '+v+' ';break;}if(v=DOM.getAttrib(n,'id'))ti+='id: '+v+' ';if(v=n.className){v=v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g,'');if(v&&v.indexOf('mceItem')==-1){ti+='class: '+v+' ';if(DOM.isBlock(n)||na=='img'||na=='span')na+='.'+v;}}na=na.replace(/(html:)/g,'');na={name:na,node:n,title:ti};t.onResolveName.dispatch(t,na);ti=na.title;na=na.name;pi=DOM.create('a',{'href':"javascript:;",onmousedown:"return false;",title:ti,'class':'mcePath_'+(de++)},na);if(p.hasChildNodes()){p.insertBefore(DOM.doc.createTextNode(' \u00bb '),p.firstChild);p.insertBefore(pi,p.firstChild);}else p.appendChild(pi);},ed.getBody());}},_sel:function(v){this.editor.execCommand('mceSelectNodeDepth',false,v);},_mceInsertAnchor:function(ui,v){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/anchor.htm',width:320+parseInt(ed.getLang('advanced.anchor_delta_width',0)),height:90+parseInt(ed.getLang('advanced.anchor_delta_height',0)),inline:true},{theme_url:this.url});},_mceCharMap:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/charmap.htm',width:550+parseInt(ed.getLang('advanced.charmap_delta_width',0)),height:250+parseInt(ed.getLang('advanced.charmap_delta_height',0)),inline:true},{theme_url:this.url});},_mceHelp:function(){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/about.htm',width:480,height:380,inline:true},{theme_url:this.url});},_mceColorPicker:function(u,v){var ed=this.editor;v=v||{};ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/color_picker.htm',width:375+parseInt(ed.getLang('advanced.colorpicker_delta_width',0)),height:250+parseInt(ed.getLang('advanced.colorpicker_delta_height',0)),close_previous:false,inline:true},{input_color:v.color,func:v.func,theme_url:this.url});},_mceCodeEditor:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/source_editor.htm',width:parseInt(ed.getParam("theme_advanced_source_editor_width",720)),height:parseInt(ed.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url});},_mceImage:function(ui,val){var ed=this.editor;if(ed.dom.getAttrib(ed.selection.getNode(),'class').indexOf('mceItem')!=-1)return;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/image.htm',width:355+parseInt(ed.getLang('advanced.image_delta_width',0)),height:275+parseInt(ed.getLang('advanced.image_delta_height',0)),inline:true},{theme_url:this.url});},_mceLink:function(ui,val){var ed=this.editor;ed.windowManager.open({url:tinymce.baseURL+'/themes/advanced/link.htm',width:310+parseInt(ed.getLang('advanced.link_delta_width',0)),height:200+parseInt(ed.getLang('advanced.link_delta_height',0)),inline:true},{theme_url:this.url});},_mceNewDocument:function(){var ed=this.editor;ed.windowManager.confirm('advanced.newdocument',function(s){if(s)ed.execCommand('mceSetContent',false,'');});},_mceForeColor:function(){var t=this;this._mceColorPicker(0,{func:function(co){t.editor.execCommand('ForeColor',false,co);}});},_mceBackColor:function(){var t=this;this._mceColorPicker(0,{func:function(co){t.editor.execCommand('HiliteColor',false,co);}});},_ufirst:function(s){return s.substring(0,1).toUpperCase()+s.substring(1);}});tinymce.ThemeManager.add('advanced',tinymce.themes.AdvancedTheme);}());
program/js/tiny_mce/themes/advanced/editor_template_src.js
@@ -1,1516 +1,1048 @@
/**
 * $Id: editor_template_src.js 296 2007-08-21 10:36:35Z spocke $
 * $Id: editor_template_src.js 766 2008-04-03 20:37:06Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/* Import theme specific language pack */
tinyMCE.importThemeLanguagePack('advanced');
(function() {
    var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;
var TinyMCE_AdvancedTheme = {
    // Private theme fields
    _defColors : "000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",
    _autoImportCSSClasses : true,
    _resizer : {},
    _buttons : [
        // Control id, button img, button title, command, user_interface, value
        ['bold', '{$lang_bold_img}', 'lang_bold_desc', 'Bold'],
        ['italic', '{$lang_italic_img}', 'lang_italic_desc', 'Italic'],
        ['underline', '{$lang_underline_img}', 'lang_underline_desc', 'Underline'],
        ['strikethrough', 'strikethrough.gif', 'lang_striketrough_desc', 'Strikethrough'],
        ['justifyleft', 'justifyleft.gif', 'lang_justifyleft_desc', 'JustifyLeft'],
        ['justifycenter', 'justifycenter.gif', 'lang_justifycenter_desc', 'JustifyCenter'],
        ['justifyright', 'justifyright.gif', 'lang_justifyright_desc', 'JustifyRight'],
        ['justifyfull', 'justifyfull.gif', 'lang_justifyfull_desc', 'JustifyFull'],
        ['bullist', 'bullist.gif', 'lang_bullist_desc', 'InsertUnorderedList'],
        ['numlist', 'numlist.gif', 'lang_numlist_desc', 'InsertOrderedList'],
        ['outdent', 'outdent.gif', 'lang_outdent_desc', 'Outdent'],
        ['indent', 'indent.gif', 'lang_indent_desc', 'Indent'],
        ['cut', 'cut.gif', 'lang_cut_desc', 'Cut'],
        ['copy', 'copy.gif', 'lang_copy_desc', 'Copy'],
        ['paste', 'paste.gif', 'lang_paste_desc', 'Paste'],
        ['undo', 'undo.gif', 'lang_undo_desc', 'Undo'],
        ['redo', 'redo.gif', 'lang_redo_desc', 'Redo'],
        ['link', 'link.gif', 'lang_link_desc', 'mceLink', true],
        ['unlink', 'unlink.gif', 'lang_unlink_desc', 'unlink'],
        ['image', 'image.gif', 'lang_image_desc', 'mceImage', true],
        ['cleanup', 'cleanup.gif', 'lang_cleanup_desc', 'mceCleanup'],
        ['help', 'help.gif', 'lang_help_desc', 'mceHelp'],
        ['code', 'code.gif', 'lang_theme_code_desc', 'mceCodeEditor'],
        ['hr', 'hr.gif', 'lang_theme_hr_desc', 'inserthorizontalrule'],
        ['removeformat', 'removeformat.gif', 'lang_theme_removeformat_desc', 'removeformat'],
        ['sub', 'sub.gif', 'lang_theme_sub_desc', 'subscript'],
        ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'],
        ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true],
        ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true],
        ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true],
        ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true],
        ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'],
        ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'],
        ['anchor', 'anchor.gif', 'lang_theme_anchor_desc', 'mceInsertAnchor'],
        ['newdocument', 'newdocument.gif', 'lang_newdocument_desc', 'mceNewDocument']
    ],
    // Tell it to load theme specific language pack(s)
    tinymce.ThemeManager.requireLangPack('advanced');
    _buttonMap : 'anchor,backcolor,bold,bullist,charmap,cleanup,code,copy,cut,forecolor,help,hr,image,indent,italic,justifycenter,justifyfull,justifyleft,justifyright,link,newdocument,numlist,outdent,paste,redo,removeformat,strikethrough,sub,sup,underline,undo,unlink,visualaid,advhr,ltr,rtl,emotions,flash,fullpage,fullscreen,iespell,insertdate,inserttime,pastetext,pasteword,selectall,preview,print,save,replace,search,table,cell_props,delete_col,delete_row,col_after,col_before,row_after,row_before,merge_cells,row_props,split_cells,delete_table',
    tinymce.create('tinymce.themes.AdvancedTheme', {
        // Control name lookup, format: title, command
        controls : {
            bold : ['bold_desc', 'Bold'],
            italic : ['italic_desc', 'Italic'],
            underline : ['underline_desc', 'Underline'],
            strikethrough : ['striketrough_desc', 'Strikethrough'],
            justifyleft : ['justifyleft_desc', 'JustifyLeft'],
            justifycenter : ['justifycenter_desc', 'JustifyCenter'],
            justifyright : ['justifyright_desc', 'JustifyRight'],
            justifyfull : ['justifyfull_desc', 'JustifyFull'],
            bullist : ['bullist_desc', 'InsertUnorderedList'],
            numlist : ['numlist_desc', 'InsertOrderedList'],
            outdent : ['outdent_desc', 'Outdent'],
            indent : ['indent_desc', 'Indent'],
            cut : ['cut_desc', 'Cut'],
            copy : ['copy_desc', 'Copy'],
            paste : ['paste_desc', 'Paste'],
            undo : ['undo_desc', 'Undo'],
            redo : ['redo_desc', 'Redo'],
            link : ['link_desc', 'mceLink'],
            unlink : ['unlink_desc', 'unlink'],
            image : ['image_desc', 'mceImage'],
            cleanup : ['cleanup_desc', 'mceCleanup'],
            help : ['help_desc', 'mceHelp'],
            code : ['code_desc', 'mceCodeEditor'],
            hr : ['hr_desc', 'InsertHorizontalRule'],
            removeformat : ['removeformat_desc', 'RemoveFormat'],
            sub : ['sub_desc', 'subscript'],
            sup : ['sup_desc', 'superscript'],
            forecolor : ['forecolor_desc', 'ForeColor'],
            forecolorpicker : ['forecolor_desc', 'mceForeColor'],
            backcolor : ['backcolor_desc', 'HiliteColor'],
            backcolorpicker : ['backcolor_desc', 'mceBackColor'],
            charmap : ['charmap_desc', 'mceCharMap'],
            visualaid : ['visualaid_desc', 'mceToggleVisualAid'],
            anchor : ['anchor_desc', 'mceInsertAnchor'],
            newdocument : ['newdocument_desc', 'mceNewDocument'],
            blockquote : ['blockquote_desc', 'mceBlockQuote']
        },
    /**
     * Returns HTML code for the specificed control.
     */
    getControlHTML : function(button_name) {
        var i, x, but;
        stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],
        // Lookup button in button list
        for (i=0; i<TinyMCE_AdvancedTheme._buttons.length; i++) {
            but = TinyMCE_AdvancedTheme._buttons[i];
        init : function(ed, url) {
            var t = this, s, v;
            if (but[0] == button_name && (button_name == "forecolor" || button_name == "backcolor"))
                return tinyMCE.getMenuButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3] + "Menu", but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));
            t.editor = ed;
            t.url = url;
            t.onResolveName = new tinymce.util.Dispatcher(this);
            if (but[0] == button_name)
                return tinyMCE.getButtonHTML(but[0], but[2], '{$themeurl}/images/' + but[1], but[3], (but.length > 4 ? but[4] : false), (but.length > 5 ? but[5] : null));
            // Default settings
            t.settings = s = extend({
                theme_advanced_path : true,
                theme_advanced_toolbar_location : 'bottom',
                theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",
                theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",
                theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",
                theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",
                theme_advanced_toolbar_align : "center",
                theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",
                theme_advanced_font_sizes : "1,2,3,4,5,6,7",
                theme_advanced_more_colors : 1,
                theme_advanced_row_height : 23,
                theme_advanced_resize_horizontal : 1,
                theme_advanced_resizing_use_cookie : 1
            }, ed.settings);
            if ((v = s.theme_advanced_path_location) && v != 'none')
                s.theme_advanced_statusbar_location = s.theme_advanced_path_location;
            if (s.theme_advanced_statusbar_location == 'none')
                s.theme_advanced_statusbar_location = 0;
            // Init editor
            ed.onInit.add(function() {
                ed.onNodeChange.add(t._nodeChanged, t);
                if (ed.settings.content_css !== false)
                    ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css"));
            });
            ed.onSetProgressState.add(function(ed, b, ti) {
                var co, id = ed.id, tb;
                if (b) {
                    t.progressTimer = setTimeout(function() {
                        co = ed.getContainer();
                        co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);
                        tb = DOM.get(ed.id + '_tbl');
                        DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});
                        DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});
                    }, ti || 0);
                } else {
                    DOM.remove(id + '_blocker');
                    DOM.remove(id + '_progress');
                    clearTimeout(t.progressTimer);
        }
            });
        // Custom controlls other than buttons
        switch (button_name) {
            case "formatselect":
                var html = '<select id="{$editor_id}_formatSelect" name="{$editor_id}_formatSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FormatBlock\',false,this.options[this.selectedIndex].value);" class="mceSelectList">';
                var formats = tinyMCE.getParam("theme_advanced_blockformats", "p,address,pre,h1,h2,h3,h4,h5,h6", true).split(',');
                var lookup = [
                    ['p', '{$lang_theme_paragraph}'],
                    ['address', '{$lang_theme_address}'],
                    ['pre', '{$lang_theme_pre}'],
                    ['h1', '{$lang_theme_h1}'],
                    ['h2', '{$lang_theme_h2}'],
                    ['h3', '{$lang_theme_h3}'],
                    ['h4', '{$lang_theme_h4}'],
                    ['h5', '{$lang_theme_h5}'],
                    ['h6', '{$lang_theme_h6}'],
                    ['div', '{$lang_theme_div}'],
                    ['blockquote', '{$lang_theme_blockquote}'],
                    ['code', '{$lang_theme_code}'],
                    ['dt', '{$lang_theme_dt}'],
                    ['dd', '{$lang_theme_dd}'],
                    ['samp', '{$lang_theme_samp}']
                ];
            DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css || "themes/advanced/skins/" + ed.settings.skin + "/ui.css"));
                html += '<option value="">{$lang_theme_block}</option>';
            if (s.skin_variant)
                DOM.loadCSS(ed.baseURI.toAbsolute(s.editor_css || "themes/advanced/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"));
        },
                // Build format select
                for (var i=0; i<formats.length; i++) {
                    for (var x=0; x<lookup.length; x++) {
                        if (formats[i] == lookup[x][0])
                            html += '<option value="&lt;' + lookup[x][0] + '&gt;">' + lookup[x][1] + '</option>';
                    }
                }
        createControl : function(n, cf) {
            var cd, c;
                html += '</select>';
            if (c = cf.createControl(n))
                return c;
                return html;
            switch (n) {
            case "styleselect":
                return '<select id="{$editor_id}_styleSelect" onmousedown="tinyMCE.themes.advanced._setupCSSClasses(\'{$editor_id}\');" name="{$editor_id}_styleSelect" onfocus="tinyMCE.addSelectAccessibility(event,this,window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'mceSetCSSClass\',false,this.options[this.selectedIndex].value);" class="mceSelectList">{$style_select_options}</select>';
                    return this._createStyleSelect();
                case "formatselect":
                    return this._createBlockFormats();
            case "fontselect":
                var fontHTML = '<select id="{$editor_id}_fontNameSelect" name="{$editor_id}_fontNameSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontName\',false,this.options[this.selectedIndex].value);" class="mceSelectList"><option value="">{$lang_theme_fontdefault}</option>';
                var iFonts = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';
                var nFonts = 'Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats';
                var fonts = tinyMCE.getParam("theme_advanced_fonts", nFonts).split(';');
                for (i=0; i<fonts.length; i++) {
                    if (fonts[i] != '') {
                        var parts = fonts[i].split('=');
                        fontHTML += '<option value="' + parts[1] + '">' + parts[0] + '</option>';
                    }
                }
                fontHTML += '</select>';
                return fontHTML;
                    return this._createFontSelect();
            case "fontsizeselect":
                return '<select id="{$editor_id}_fontSizeSelect" name="{$editor_id}_fontSizeSelect" onfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="tinyMCE.execInstanceCommand(\'{$editor_id}\',\'FontSize\',false,this.options[this.selectedIndex].value);" class="mceSelectList">'+
                        '<option value="0">{$lang_theme_font_size}</option>'+
                        '<option value="1">1 (8 pt)</option>'+
                        '<option value="2">2 (10 pt)</option>'+
                        '<option value="3">3 (12 pt)</option>'+
                        '<option value="4">4 (14 pt)</option>'+
                        '<option value="5">5 (18 pt)</option>'+
                        '<option value="6">6 (24 pt)</option>'+
                        '<option value="7">7 (36 pt)</option>'+
                        '</select>';
            case "|":
            case "separator":
                return '<img src="{$themeurl}/images/separator.gif" width="2" height="20" class="mceSeparatorLine" alt="" />';
            case "spacer":
                return '<img src="{$themeurl}/images/separator.gif" width="2" height="15" border="0" class="mceSeparatorLine" style="vertical-align: middle" alt="" />';
            case "rowseparator":
                return '<br />';
        }
        return "";
    },
    /**
     * Theme specific execcommand handling.
     */
    execCommand : function(editor_id, element, command, user_interface, value) {
        switch (command) {
            case 'mceHelp':
                tinyMCE.openWindow({
                    file : 'about.htm',
                    width : 480,
                    height : 380
                }, {
                    tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion,
                    tinymce_releasedate : tinyMCE.releaseDate,
                    inline : "yes"
                });
            return true;
            case "mceLink":
                var inst = tinyMCE.getInstanceById(editor_id);
                var doc = inst.getDoc();
                var selectedText = "";
                if (tinyMCE.isMSIE) {
                    var rng = doc.selection.createRange();
                    selectedText = rng.text;
                } else
                    selectedText = inst.getSel().toString();
                if (!tinyMCE.linkElement) {
                    if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0))
                        return true;
                }
                var href = "", target = "", title = "", onclick = "", action = "insert", style_class = "";
                if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a")
                    tinyMCE.linkElement = tinyMCE.selectedElement;
                // Is anchor not a link
                if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "")
                    tinyMCE.linkElement = null;
                if (tinyMCE.linkElement) {
                    href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href');
                    target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target');
                    title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title');
                    onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');
                    style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class');
                    // Try old onclick to if copy/pasted content
                    if (onclick == "")
                        onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick');
                    onclick = tinyMCE.cleanupEventStr(onclick);
                    href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");
                    // Use mce_href if defined
                    mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_href');
                    if (mceRealHref != "") {
                        href = mceRealHref;
                        if (tinyMCE.getParam('convert_urls'))
                            href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);");
                    }
                    action = "update";
                }
                var template = new Array();
                template['file'] = 'link.htm';
                template['width'] = 310;
                template['height'] = 200;
                // Language specific width and height addons
                template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0);
                template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0);
                if (inst.settings['insertlink_callback']) {
                    var returnVal = eval(inst.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);");
                    if (returnVal && returnVal['href'])
                        TinyMCE_AdvancedTheme._insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']);
                } else {
                    tinyMCE.openWindow(template, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class, inline : "yes"});
                }
                return true;
            case "mceImage":
                var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = "";
                var title = "", onmouseover = "", onmouseout = "", action = "insert";
                var img = tinyMCE.imgElement;
                var inst = tinyMCE.getInstanceById(editor_id);
                if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {
                    img = tinyMCE.selectedElement;
                    tinyMCE.imgElement = img;
                }
                if (img) {
                    // Is it a internal MCE visual aid image, then skip this one.
                    if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0)
                        return true;
                    src = tinyMCE.getAttrib(img, 'src');
                    alt = tinyMCE.getAttrib(img, 'alt');
                    // Try polling out the title
                    if (alt == "")
                        alt = tinyMCE.getAttrib(img, 'title');
                    // Fix width/height attributes if the styles is specified
                    if (tinyMCE.isGecko) {
                        var w = img.style.width;
                        if (w != null && w != "")
                            img.setAttribute("width", w);
                        var h = img.style.height;
                        if (h != null && h != "")
                            img.setAttribute("height", h);
                    }
                    border = tinyMCE.getAttrib(img, 'border');
                    hspace = tinyMCE.getAttrib(img, 'hspace');
                    vspace = tinyMCE.getAttrib(img, 'vspace');
                    width = tinyMCE.getAttrib(img, 'width');
                    height = tinyMCE.getAttrib(img, 'height');
                    align = tinyMCE.getAttrib(img, 'align');
                    onmouseover = tinyMCE.getAttrib(img, 'onmouseover');
                    onmouseout = tinyMCE.getAttrib(img, 'onmouseout');
                    title = tinyMCE.getAttrib(img, 'title');
                    // Is realy specified?
                    if (tinyMCE.isMSIE) {
                        width = img.attributes['width'].specified ? width : "";
                        height = img.attributes['height'].specified ? height : "";
                    }
                    //onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover));
                    //onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout));
                    src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");
                    // Use mce_src if defined
                    mceRealSrc = tinyMCE.getAttrib(img, 'mce_src');
                    if (mceRealSrc != "") {
                        src = mceRealSrc;
                        if (tinyMCE.getParam('convert_urls'))
                            src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);");
                    }
                    //if (onmouseover != "")
                    //    onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);");
                    //if (onmouseout != "")
                    //    onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);");
                    action = "update";
                }
                var template = new Array();
                template['file'] = 'image.htm?src={$src}';
                template['width'] = 355;
                template['height'] = 265 + (tinyMCE.isMSIE ? 25 : 0);
                // Language specific width and height addons
                template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0);
                template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0);
                if (inst.settings['insertimage_callback']) {
                    var returnVal = eval(inst.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");
                    if (returnVal && returnVal['src'])
                        TinyMCE_AdvancedTheme._insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']);
                } else
                    tinyMCE.openWindow(template, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action, inline : "yes"});
                return true;
                    return this._createFontSizeSelect();
            case "forecolor":
                var fcp = new TinyMCE_Layer(editor_id + '_fcPreview', false), p, img, elm;
                    return this._createForeColorMenu();
                TinyMCE_AdvancedTheme._hideMenus(editor_id);
                if (!fcp.exists()) {
                    fcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));
                    elm = fcp.getElement();
                    elm._editor_id = editor_id;
                    elm._command = "forecolor";
                    elm._switchId = editor_id + "_forecolor";
                    tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);
                    tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);
                    tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);
                case "backcolor":
                    return this._createBackColorMenu();
                }
                img = tinyMCE.selectNodes(document.getElementById(editor_id + "_forecolor"), function(n) {return n.nodeName == "IMG";})[0];
                p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));
            if ((cd = this.controls[n]))
                return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});
        },
                fcp.moveTo(p.absLeft, p.absTop);
                fcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).foreColor;
                fcp.show();
        execCommand : function(cmd, ui, val) {
            var f = this['_' + cmd];
                return false;
            case "forecolorpicker":
                this._pickColor(editor_id, 'forecolor');
                return true;
            case "forecolorMenu":
                TinyMCE_AdvancedTheme._hideMenus(editor_id);
                // Create color layer
                var ml = new TinyMCE_Layer(editor_id + '_fcMenu');
                if (!ml.exists())
                    ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_text_colors', 'forecolor'));
                tinyMCE.switchClass(editor_id + '_forecolor', 'mceMenuButtonFocus');
                ml.moveRelativeTo(document.getElementById(editor_id + "_forecolor"), 'bl');
                ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);
                if (tinyMCE.isOpera)
                    ml.moveBy(0, -2);
                ml.show();
            return true;
            case "HiliteColor":
                var bcp = new TinyMCE_Layer(editor_id + '_bcPreview', false), p, img;
                TinyMCE_AdvancedTheme._hideMenus(editor_id);
                if (!bcp.exists()) {
                    bcp.create('div', 'mceColorPreview', document.getElementById(editor_id + '_toolbar'));
                    elm = bcp.getElement();
                    elm._editor_id = editor_id;
                    elm._command = "HiliteColor";
                    elm._switchId = editor_id + "_backcolor";
                    tinyMCE.addEvent(elm, 'click', TinyMCE_AdvancedTheme._handleMenuEvent);
                    tinyMCE.addEvent(elm, 'mouseover', TinyMCE_AdvancedTheme._handleMenuEvent);
                    tinyMCE.addEvent(elm, 'mouseout', TinyMCE_AdvancedTheme._handleMenuEvent);
                }
                img = tinyMCE.selectNodes(document.getElementById(editor_id + "_backcolor"), function(n) {return n.nodeName == "IMG";})[0];
                p = tinyMCE.getAbsPosition(img, document.getElementById(editor_id + '_toolbar'));
                bcp.moveTo(p.absLeft, p.absTop);
                bcp.getElement().style.backgroundColor = value != null ? value : tinyMCE.getInstanceById(editor_id).backColor;
                bcp.show();
                return false;
            case "HiliteColorMenu":
                TinyMCE_AdvancedTheme._hideMenus(editor_id);
                // Create color layer
                var ml = new TinyMCE_Layer(editor_id + '_bcMenu');
                if (!ml.exists())
                    ml.create('div', 'mceMenu', document.body, TinyMCE_AdvancedTheme._getColorHTML(editor_id, 'theme_advanced_background_colors', 'HiliteColor'));
                tinyMCE.switchClass(editor_id + '_backcolor', 'mceMenuButtonFocus');
                ml.moveRelativeTo(document.getElementById(editor_id + "_backcolor"), 'bl');
                ml.moveBy(tinyMCE.isMSIE && !tinyMCE.isOpera ? -1 : 1, -1);
                if (tinyMCE.isOpera)
                    ml.moveBy(0, -2);
                ml.show();
            return true;
            case "backcolorpicker":
                this._pickColor(editor_id, 'HiliteColor');
                return true;
            case "mceColorPicker":
                if (user_interface) {
                    var template = [];
                    if (!value['callback'] && !value['color'])
                        value['color'] = value['document'].getElementById(value['element_id']).value;
                    template['file'] = 'color_picker.htm';
                    template['width'] = 380;
                    template['height'] = 250;
                    template['close_previous'] = "no";
                    template['width'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_width', 0);
                    template['height'] += tinyMCE.getLang('lang_theme_advanced_colorpicker_delta_height', 0);
                    if (typeof(value['store_selection']) == "undefined")
                        value['store_selection'] = true;
                    tinyMCE.lastColorPickerValue = value;
                    tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']});
                } else {
                    var savedVal = tinyMCE.lastColorPickerValue, elm;
                    if (savedVal['callback']) {
                        savedVal['callback'](value);
                        return true;
                    }
                    elm = savedVal['document'].getElementById(savedVal['element_id']);
                    elm.value = value;
                    if (elm.onchange != null && elm.onchange != '')
                        eval('elm.onchange();');
                }
            return true;
            case "mceCodeEditor":
                var template = new Array();
                template['file'] = 'source_editor.htm';
                template['width'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_width", 720));
                template['height'] = parseInt(tinyMCE.getParam("theme_advanced_source_editor_height", 580));
                tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no", inline : "yes"});
                return true;
            case "mceCharMap":
                var template = new Array();
                template['file'] = 'charmap.htm';
                template['width'] = 550 + (tinyMCE.isOpera ? 40 : 0);
                template['height'] = 250;
                template['width'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_width', 0);
                template['height'] += tinyMCE.getLang('lang_theme_advanced_charmap_delta_height', 0);
                tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
                return true;
            case "mceInsertAnchor":
                var template = new Array();
                template['file'] = 'anchor.htm';
                template['width'] = 320;
                template['height'] = 90 + (tinyMCE.isNS7 ? 30 : 0);
                template['width'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_width', 0);
                template['height'] += tinyMCE.getLang('lang_theme_advanced_anchor_delta_height', 0);
                tinyMCE.openWindow(template, {editor_id : editor_id, inline : "yes"});
                return true;
            case "mceNewDocument":
                if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_newdocument'))))
                    tinyMCE.execInstanceCommand(editor_id, 'mceSetContent', false, ' ');
            if (f) {
                f.call(this, ui, val);
                return true;
        }
        return false;
    },
    /**
     * Editor instance template function.
        _importClasses : function() {
            var ed = this.editor, c = ed.controlManager.get('styleselect');
            if (c.getLength() == 0) {
                each(ed.dom.getClasses(), function(o) {
                    c.add(o['class'], o['class']);
                });
            }
        },
        _createStyleSelect : function(n) {
            var t = this, ed = t.editor, cf = ed.controlManager, c = cf.createListBox('styleselect', {
                title : 'advanced.style_select',
                onselect : function(v) {
                    if (c.selectedValue === v) {
                        ed.execCommand('mceSetStyleInfo', 0, {command : 'removeformat'});
                        c.select();
                        return false;
                    } else
                        ed.execCommand('mceSetCSSClass', 0, v);
                }
            });
            if (c) {
                each(ed.getParam('theme_advanced_styles', '', 'hash'), function(v, k) {
                    if (v)
                        c.add(t.editor.translate(k), v);
                });
                c.onPostRender.add(function(ed, n) {
                    Event.add(n, 'focus', t._importClasses, t);
                    Event.add(n, 'mousedown', t._importClasses, t);
                });
            }
            return c;
        },
        _createFontSelect : function() {
            var c, t = this, ed = t.editor;
            c = ed.controlManager.createListBox('fontselect', {title : 'advanced.fontdefault', cmd : 'FontName'});
            if (c) {
                each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {
                    c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});
                });
            }
            return c;
        },
        _createFontSizeSelect : function() {
            var c, t = this, lo = [
                "1 (8 pt)",
                "2 (10 pt)",
                "3 (12 pt)",
                "4 (14 pt)",
                "5 (18 pt)",
                "6 (24 pt)",
                "7 (36 pt)"
            ], fz = [8, 10, 12, 14, 18, 24, 36];
            c = t.editor.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', cmd : 'FontSize'});
            if (c) {
                each(explode(t.settings.theme_advanced_font_sizes), function(v) {
                    c.add(lo[parseInt(v) - 1], v, {'style' : 'font-size:' + fz[v - 1] + 'pt', 'class' : 'mceFontSize' + v});
                });
            }
            return c;
        },
        _createBlockFormats : function() {
            var c, fmts = {
                p : 'advanced.paragraph',
                address : 'advanced.address',
                pre : 'advanced.pre',
                h1 : 'advanced.h1',
                h2 : 'advanced.h2',
                h3 : 'advanced.h3',
                h4 : 'advanced.h4',
                h5 : 'advanced.h5',
                h6 : 'advanced.h6',
                div : 'advanced.div',
                blockquote : 'advanced.blockquote',
                code : 'advanced.code',
                dt : 'advanced.dt',
                dd : 'advanced.dd',
                samp : 'advanced.samp'
            }, t = this;
            c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'});
            if (c) {
                each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {
                    c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});
                });
            }
            return c;
        },
        _createForeColorMenu : function() {
            var c, t = this, s = t.settings, o = {}, v;
            if (s.theme_advanced_more_colors) {
                o.more_colors_func = function() {
                    t._mceColorPicker(0, {
                        color : c.value,
                        func : function(co) {
                            c.setColor(co);
                        }
                    });
                };
            }
            if (v = s.theme_advanced_text_colors)
                o.colors = v;
            o.title = 'advanced.forecolor_desc';
            o.cmd = 'ForeColor';
            o.scope = this;
            c = t.editor.controlManager.createColorSplitButton('forecolor', o);
            return c;
        },
        _createBackColorMenu : function() {
            var c, t = this, s = t.settings, o = {}, v;
            if (s.theme_advanced_more_colors) {
                o.more_colors_func = function() {
                    t._mceColorPicker(0, {
                        color : c.value,
                        func : function(co) {
                            c.setColor(co);
                        }
                    });
                };
            }
            if (v = s.theme_advanced_background_colors)
                o.colors = v;
            o.title = 'advanced.backcolor_desc';
            o.cmd = 'HiliteColor';
            o.scope = this;
            c = t.editor.controlManager.createColorSplitButton('backcolor', o);
            return c;
        },
        renderUI : function(o) {
            var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;
            n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});
            if (!DOM.boxModel)
                n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});
            n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});
            n = tb = DOM.add(n, 'tbody');
            switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {
                case "rowlayout":
                    ic = t._rowLayout(s, tb, o);
                    break;
                case "customlayout":
                    ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);
                    break;
                default:
                    ic = t._simpleLayout(s, tb, o, p);
            }
            n = o.targetNode;
            // Add classes to first and last TRs
            nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8
            DOM.addClass(nl[0], 'mceFirst');
            DOM.addClass(nl[nl.length - 1], 'mceLast');
            // Add classes to first and last TDs
            each(DOM.select('tr', tb), function(n) {
                DOM.addClass(n.firstChild, 'mceFirst');
                DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');
            });
            if (DOM.get(s.theme_advanced_toolbar_container))
                DOM.get(s.theme_advanced_toolbar_container).appendChild(p);
            else
                DOM.insertAfter(p, n);
            Event.add(ed.id + '_path_row', 'click', function(e) {
                e = e.target;
                if (e.nodeName == 'A') {
                    t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));
                    return Event.cancel(e);
                }
            });
/*
            if (DOM.get(ed.id + '_path_row')) {
                Event.add(ed.id + '_tbl', 'mouseover', function(e) {
                    var re;
                    e = e.target;
                    if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {
                        re = DOM.get(ed.id + '_path_row');
                        t.lastPath = re.innerHTML;
                        DOM.setHTML(re, e.parentNode.title);
                    }
                });
                Event.add(ed.id + '_tbl', 'mouseout', function(e) {
                    if (t.lastPath) {
                        DOM.setHTML(ed.id + '_path_row', t.lastPath);
                        t.lastPath = 0;
                    }
                });
            }
     */
    getEditorTemplate : function(settings, editorId) {
        function removeFromArray(in_array, remove_array) {
            var outArray = new Array(), skip;
            
            for (var i=0; i<in_array.length; i++) {
                skip = false;
            if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))
                Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});
                for (var j=0; j<remove_array.length; j++) {
                    if (in_array[i] == remove_array[j]) {
                        skip = true;
            if (s.theme_advanced_toolbar_location == 'external')
                o.deltaHeight = 0;
            t.deltaHeight = o.deltaHeight;
            o.targetNode = null;
            return {
                iframeContainer : ic,
                editorContainer : ed.id + '_parent',
                sizeContainer : sc,
                deltaHeight : o.deltaHeight
            };
        },
        getInfo : function() {
            return {
                longname : 'Advanced theme',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
                    }
        },
        resizeBy : function(dw, dh) {
            var e = DOM.get(this.editor.id + '_tbl');
            this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);
        },
        resizeTo : function(w, h) {
            var ed = this.editor, s = ed.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'), dh;
            // Boundery fix box
            w = Math.max(s.theme_advanced_resizing_min_width || 100, w);
            h = Math.max(s.theme_advanced_resizing_min_height || 100, h);
            w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);
            h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);
            // Calc difference between iframe and container
            dh = e.clientHeight - ifr.clientHeight;
            // Resize iframe and container
            DOM.setStyle(ifr, 'height', h - dh);
            DOM.setStyles(e, {width : w, height : h});
        },
        destroy : function() {
            var id = this.editor.id;
            Event.clear(id + '_resize');
            Event.clear(id + '_path_row');
            Event.clear(id + '_external_close');
        },
        // Internal functions
        _simpleLayout : function(s, tb, o, p) {
            var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;
            // Create toolbar container at top
            if (lo == 'top')
                t._addToolbars(tb, o);
            // Create external toolbar
            if (lo == 'external') {
                n = c = DOM.create('div', {style : 'position:relative'});
                n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});
                DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});
                n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});
                etb = DOM.add(n, 'tbody');
                if (p.firstChild.className == 'mceOldBoxModel')
                    p.firstChild.appendChild(c);
                else
                    p.insertBefore(c, p.firstChild);
                t._addToolbars(etb, o);
                ed.onMouseUp.add(function() {
                    var e = DOM.get(ed.id + '_external');
                    DOM.show(e);
                    DOM.hide(lastExtID);
                    var f = Event.add(ed.id + '_external_close', 'click', function() {
                        DOM.hide(ed.id + '_external');
                        Event.remove(ed.id + '_external_close', 'click', f);
                    });
                    DOM.show(e);
                    DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);
                    // Fixes IE rendering bug
                    DOM.hide(e);
                    DOM.show(e);
                    e.style.filter = '';
                    lastExtID = ed.id + '_external';
                    e = null;
                });
                }
                if (!skip) {
                    outArray[outArray.length] = in_array[i];
                }
            if (sl == 'top')
                t._addStatusBar(tb, o);
            // Create iframe container
            if (!s.theme_advanced_toolbar_container) {
                n = DOM.add(tb, 'tr');
                n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
            }
            return outArray;
            // Create toolbar container at bottom
            if (lo == 'bottom')
                t._addToolbars(tb, o);
            if (sl == 'bottom')
                t._addStatusBar(tb, o);
            return ic;
        },
        _rowLayout : function(s, tb, o) {
            var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;
            dc = s.theme_advanced_containers_default_class || '';
            da = s.theme_advanced_containers_default_align || 'center';
            each(explode(s.theme_advanced_containers || ''), function(c, i) {
                var v = s['theme_advanced_container_' + c] || '';
                switch (c.toLowerCase()) {
                    case 'mceeditor':
                        n = DOM.add(tb, 'tr');
                        n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});
                        break;
                    case 'mceelementpath':
                        t._addStatusBar(tb, o);
                        break;
                    default:
                        a = s['theme_advanced_container_' + c + '_align'].toLowerCase();
                        a = 'mce' + t._ufirst(a);
                        n = DOM.add(DOM.add(tb, 'tr'), 'td', {
                            'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da
                        });
                        to = cf.createToolbar("toolbar" + i);
                        t._addControls(v, to);
                        DOM.setHTML(n, to.renderHTML());
                        o.deltaHeight -= s.theme_advanced_row_height;
                }
            });
            return ic;
        },
        _addControls : function(v, tb) {
            var t = this, s = t.settings, di, cf = t.editor.controlManager;
            if (s.theme_advanced_disable && !t._disabled) {
                di = {};
                each(explode(s.theme_advanced_disable), function(v) {
                    di[v] = 1;
                });
                t._disabled = di;
            } else
                di = t._disabled;
            each(explode(v), function(n) {
                var c;
                if (di && di[n])
                    return;
                // Compatiblity with 2.x
                if (n == 'tablecontrols') {
                    each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {
                        n = t.createControl(n, cf);
                        if (n)
                            tb.add(n);
                    });
                    return;
        }
        function addToArray(in_array, add_array) {
            for (var i=0; i<add_array.length; i++) {
                in_array[in_array.length] = add_array[i];
                c = t.createControl(n, cf);
                if (c)
                    tb.add(c);
            });
        },
        _addToolbars : function(c, o) {
            var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a;
            a = s.theme_advanced_toolbar_align.toLowerCase();
            a = 'mce' + t._ufirst(a);
            n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a});
            if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus'))
                h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));
            h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->'));
            // Create toolbar and add the controls
            for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {
                tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});
                if (s['theme_advanced_buttons' + i + '_add'])
                    v += ',' + s['theme_advanced_buttons' + i + '_add'];
                if (s['theme_advanced_buttons' + i + '_add_before'])
                    v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;
                t._addControls(v, tb);
                //n.appendChild(n = tb.render());
                h.push(tb.renderHTML());
                o.deltaHeight -= s.theme_advanced_row_height;
            }
            return in_array;
            h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));
            DOM.setHTML(n, h.join(''));
        },
        _addStatusBar : function(tb, o) {
            var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;
            n = DOM.add(tb, 'tr');
            n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});
            n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : '&nbsp;');
            DOM.add(n, 'a', {href : '#', accesskey : 'x'});
            if (s.theme_advanced_resizing && !tinymce.isOldWebKit) {
                DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});
                if (s.theme_advanced_resizing_use_cookie) {
                    ed.onPostRender.add(function() {
                        var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');
                        if (!o)
                            return;
                        if (s.theme_advanced_resize_horizontal)
                            c.style.width = Math.max(10, o.cw) + 'px';
                        c.style.height = Math.max(10, o.ch) + 'px';
                        DOM.get(ed.id + '_ifr').style.height = Math.max(10, parseInt(o.ch) + t.deltaHeight) + 'px';
                    });
        }
        var template = new Array();
        var deltaHeight = 0;
        var resizing = tinyMCE.getParam("theme_advanced_resizing", false);
        var path = tinyMCE.getParam("theme_advanced_path", true);
        var statusbarHTML = '<div id="{$editor_id}_path" class="mceStatusbarPathText" style="display: ' + (path ? "block" : "none") + '">&#160;</div><div id="{$editor_id}_resize" class="mceStatusbarResize" style="display: ' + (resizing ? "block" : "none") + '" onmousedown="tinyMCE.themes.advanced._setResizing(event,\'{$editor_id}\',true);"></div><br style="clear: both" />';
        var layoutManager = tinyMCE.getParam("theme_advanced_layout_manager", "SimpleLayout");
                ed.onPostRender.add(function() {
                    Event.add(ed.id + '_resize', 'mousedown', function(e) {
                        var c, p, w, h, n, pa;
        // Setup style select options -- MOVED UP FOR EXTERNAL TOOLBAR COMPATABILITY!
        var styleSelectHTML = '<option value="">{$lang_theme_style_select}</option>';
        if (settings['theme_advanced_styles']) {
            var stylesAr = settings['theme_advanced_styles'].split(';');
                        // Measure container
                        c = DOM.get(ed.id + '_tbl');
                        w = c.clientWidth;
                        h = c.clientHeight;
            
            for (var i=0; i<stylesAr.length; i++) {
                var key, value;
                        miw = s.theme_advanced_resizing_min_width || 100;
                        mih = s.theme_advanced_resizing_min_height || 100;
                        maw = s.theme_advanced_resizing_max_width || 0xFFFF;
                        mah = s.theme_advanced_resizing_max_height || 0xFFFF;
                key = stylesAr[i].split('=')[0];
                value = stylesAr[i].split('=')[1];
                        // Setup placeholder
                        p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'});
                        DOM.setStyles(p, {width : w, height : h});
                styleSelectHTML += '<option value="' + value + '">' + key + '</option>';
            }
                        // Replace with placeholder
                        DOM.hide(c);
                        DOM.show(p);
            TinyMCE_AdvancedTheme._autoImportCSSClasses = false;
        }
        switch(layoutManager) {
            case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)...
                var toolbarHTML = "";
                var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom");
                var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center");
                var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); // Compatiblity
                var statusbarLocation = tinyMCE.getParam("theme_advanced_statusbar_location", pathLocation);
                var defVals = {
                    theme_advanced_buttons1 : "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",
                    theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,anchor,image,cleanup,help,code",
                    theme_advanced_buttons3 : "hr,removeformat,visualaid,separator,sub,sup,separator,charmap"
                        // Create internal resize obj
                        r = {
                            x : e.screenX,
                            y : e.screenY,
                            w : w,
                            h : h,
                            dx : null,
                            dy : null
                };
                // Add accessibility control
                toolbarHTML += '<a href="#" accesskey="q" title="' + tinyMCE.getLang("lang_toolbar_focus") + '"';
                if (!tinyMCE.getParam("accessibility_focus"))
                    toolbarHTML += ' onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"';
                toolbarHTML += '></a>';
                // Render rows
                for (var i=1; i<100; i++) {
                    var def = defVals["theme_advanced_buttons" + i];
                    var buttons = tinyMCE.getParam("theme_advanced_buttons" + i, def == null ? '' : def, true, ',');
                    if (buttons.length == 0)
                        break;
                    buttons = removeFromArray(buttons, tinyMCE.getParam("theme_advanced_disable", "", true, ','));
                    buttons = addToArray(buttons, tinyMCE.getParam("theme_advanced_buttons" + i + "_add", "", true, ','));
                    buttons = addToArray(tinyMCE.getParam("theme_advanced_buttons" + i + "_add_before", "", true, ','), buttons);
                    for (var b=0; b<buttons.length; b++)
                        toolbarHTML += tinyMCE.getControlHTML(buttons[b]);
                    if (buttons.length > 0) {
                        toolbarHTML += "<br />";
                        deltaHeight -= 23;
                    }
                }
                // Add accessibility control
                toolbarHTML += '<a href="#" accesskey="z" onfocus="tinyMCE.getInstanceById(\'' + editorId + '\').getWin().focus();"></a>';
                // Setup template html
                template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';
                if (toolbarLocation == "top")
                    template['html'] += '<tr><td dir="ltr" class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
                if (statusbarLocation == "top") {
                    template['html'] += '<tr><td class="mceStatusbarTop" height="1">' + statusbarHTML + '</td></tr>';
                    deltaHeight -= 23;
                }
                template['html'] += '<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';
                if (toolbarLocation == "bottom")
                    template['html'] += '<tr><td dir="ltr" class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
                // External toolbar changes
                if (toolbarLocation == "external") {
                    var bod = document.body;
                    var elm = document.createElement ("div");
                    toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML);
                    toolbarHTML = tinyMCE.applyTemplate(toolbarHTML, {editor_id : editorId});
                    elm.className = "mceToolbarExternal";
                    elm.id = editorId+"_toolbar";
                    elm.innerHTML = '<table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table>';
                    bod.appendChild (elm);
                    // bod.style.marginTop = elm.offsetHeight + "px";
                    deltaHeight = 0;
                    tinyMCE.getInstanceById(editorId).toolbarElement = elm;
                    //template['html'] = '<div id="mceExternalToolbar" align="center" class="mceToolbarExternal"><table width="100%" border="0" align="center"><tr><td align="center">'+toolbarHTML+'</td></tr></table></div>' + template["html"];
                } else {
                    tinyMCE.getInstanceById(editorId).toolbarElement = null;
                }
                if (statusbarLocation == "bottom") {
                    template['html'] += '<tr><td class="mceStatusbarBottom" height="1">' + statusbarHTML + '</td></tr>';
                    deltaHeight -= 23;
                }
                template['html'] += '</tbody></table>';
                //"SimpleLayout"
            break;
            case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom.
                template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width}px;height:{$height}px"><tbody>';
                var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ",");
                var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container");
                var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center");
                //Render Containers:
                for (var i = 0; i < containers.length; i++)
                {
                    if (containers[i] == "mceEditor") //Exceptions for mceEditor and ...
                        template['html'] += '<tr><td align="center" class="mceEditor_border"><span id="{$editor_id}"></span></td></tr>';
                    else if (containers[i] == "mceElementpath" || containers[i] == "mceStatusbar") // ... mceElementpath:
                    {
                        var pathClass = "mceStatusbar";
                        if (i == containers.length-1)
                        {
                            pathClass = "mceStatusbarBottom";
                        }
                        else if (i == 0)
                        {
                            pathClass = "mceStatusbar";
                        }
                        else
                        {
                            deltaHeight-=2;
                        }
                        template['html'] += '<tr><td class="' + pathClass + '" height="1">' + statusbarHTML + '</td></tr>';
                        deltaHeight -= 22;
                    } else { // Render normal Container
                        var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ',');
                        var curContainerHTML = "";
                        var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign);
                        var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS);
                        curContainer = removeFromArray(curContainer, tinyMCE.getParam("theme_advanced_disable", "", true, ','));
                        for (var j=0; j<curContainer.length; j++)
                            curContainerHTML += tinyMCE.getControlHTML(curContainer[j]);
                        if (curContainer.length > 0) {
                            curContainerHTML += "<br />";
                            deltaHeight -= 23;
                        }
                        template['html'] += '<tr><td class="' + curCSS + '" align="' + curAlign + '" height="1">' + curContainerHTML + '</td></tr>';
                    }
                }
                template['html'] += '</tbody></table>';
                //RowLayout
            break;
            case "CustomLayout" : //User defined layout callback...
                var customLayout = tinyMCE.getParam("theme_advanced_custom_layout","");
                if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") {
                    template = eval(customLayout + "(template);");
                }
            break;
        }
        if (resizing)
            template['html'] += '<span id="{$editor_id}_resize_box" class="mceResizeBox"></span>';
        template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML);
        // Set to default values
        if (!template['delta_width'])
            template['delta_width'] = 0;
        if (!template['delta_height'])
            template['delta_height'] = deltaHeight;
        return template;
    },
    initInstance : function(inst) {
        if (tinyMCE.getParam("theme_advanced_resizing", false)) {
            if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
                var w = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_width");
                var h = TinyMCE_AdvancedTheme._getCookie("TinyMCE_" + inst.editorId + "_height");
                TinyMCE_AdvancedTheme._resizeTo(inst, w, h, tinyMCE.getParam("theme_advanced_resize_horizontal", true));
            }
        }
        inst.addShortcut('ctrl', 'k', 'lang_link_desc', 'mceLink');
    },
    removeInstance : function(inst) {
        new TinyMCE_Layer(inst.editorId + '_fcMenu').remove();
        new TinyMCE_Layer(inst.editorId + '_bcMenu').remove();
    },
    hideInstance : function(inst) {
        TinyMCE_AdvancedTheme._hideMenus(inst.editorId);
    },
    _handleMenuEvent : function(e) {
        var te = tinyMCE.isMSIE ? window.event.srcElement : e.target;
        tinyMCE._menuButtonEvent(e.type == "mouseover" ? "over" : "out", document.getElementById(te._switchId));
        if (e.type == "click")
            tinyMCE.execInstanceCommand(te._editor_id, te._command);
    },
    _hideMenus : function(id) {
        var fcml = new TinyMCE_Layer(id + '_fcMenu'), bcml = new TinyMCE_Layer(id + '_bcMenu');
        if (fcml.exists() && fcml.isVisible()) {
            tinyMCE.switchClass(id + '_forecolor', 'mceMenuButton');
            fcml.hide();
        }
        if (bcml.exists() && bcml.isVisible()) {
            tinyMCE.switchClass(id + '_backcolor', 'mceMenuButton');
            bcml.hide();
        }
    },
    /**
     * Node change handler.
     */
    handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection, setup_content) {
        var alignNode, breakOut, classNode;
        function selectByValue(select_elm, value, first_index) {
            first_index = typeof(first_index) == "undefined" ? false : true;
            if (select_elm) {
                for (var i=0; i<select_elm.options.length; i++) {
                    var ov = "" + select_elm.options[i].value;
                    if (first_index && ov.toLowerCase().indexOf(value.toLowerCase()) == 0) {
                        select_elm.selectedIndex = i;
                        return true;
                    }
                    if (ov == value) {
                        select_elm.selectedIndex = i;
                        return true;
                    }
                }
            }
            return false;
        };
        // No node provided
        if (node == null)
            return;
        // Update path
        var pathElm = document.getElementById(editor_id + "_path");
        var inst = tinyMCE.getInstanceById(editor_id);
        var doc = inst.getDoc();
        TinyMCE_AdvancedTheme._hideMenus(editor_id);
        if (pathElm) {
            // Get node path
            var parentNode = node;
            var path = new Array();
            while (parentNode != null) {
                if (parentNode.nodeName.toUpperCase() == "BODY") {
                    break;
                }
                // Only append element nodes to path
                if (parentNode.nodeType == 1 && tinyMCE.getAttrib(parentNode, "class").indexOf('mceItemHidden') == -1) {
                    path[path.length] = parentNode;
                }
                parentNode = parentNode.parentNode;
            }
            // Setup HTML
            var html = "";
            for (var i=path.length-1; i>=0; i--) {
                var nodeName = path[i].nodeName.toLowerCase();
                var nodeData = "";
                if (nodeName.indexOf("html:") == 0)
                    nodeName = nodeName.substring(5);
                if (nodeName == "b") {
                    nodeName = "strong";
                }
                if (nodeName == "i") {
                    nodeName = "em";
                }
                if (nodeName == "span") {
                    var cn = tinyMCE.getAttrib(path[i], "class");
                    if (cn != "" && cn.indexOf('mceItem') == -1)
                        nodeData += "class: " + cn + " ";
                    var st = tinyMCE.getAttrib(path[i], "style");
                    if (st != "") {
                        st = tinyMCE.serializeStyle(tinyMCE.parseStyle(st));
                        nodeData += "style: " + tinyMCE.xmlEncode(st) + " ";
                    }
                }
                if (nodeName == "font") {
                    if (tinyMCE.getParam("convert_fonts_to_spans"))
                        nodeName = "span";
                    var face = tinyMCE.getAttrib(path[i], "face");
                    if (face != "")
                        nodeData += "font: " + tinyMCE.xmlEncode(face) + " ";
                    var size = tinyMCE.getAttrib(path[i], "size");
                    if (size != "")
                        nodeData += "size: " + tinyMCE.xmlEncode(size) + " ";
                    var color = tinyMCE.getAttrib(path[i], "color");
                    if (color != "")
                        nodeData += "color: " + tinyMCE.xmlEncode(color) + " ";
                }
                if (tinyMCE.getAttrib(path[i], 'id') != "") {
                    nodeData += "id: " + path[i].getAttribute('id') + " ";
                }
                var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);
                if (className != "" && className.indexOf('mceItem') == -1)
                    nodeData += "class: " + className + " ";
                if (tinyMCE.getAttrib(path[i], 'src') != "") {
                    var src = tinyMCE.getAttrib(path[i], "mce_src");
                    if (src == "")
                         src = tinyMCE.getAttrib(path[i], "src");
                    nodeData += "src: " + tinyMCE.xmlEncode(src) + " ";
                }
                if (path[i].nodeName == 'A' && tinyMCE.getAttrib(path[i], 'href') != "") {
                    var href = tinyMCE.getAttrib(path[i], "mce_href");
                    if (href == "")
                         href = tinyMCE.getAttrib(path[i], "href");
                    nodeData += "href: " + tinyMCE.xmlEncode(href) + " ";
                }
                className = tinyMCE.getAttrib(path[i], "class");
                if ((nodeName == "img" || nodeName == "span") && className.indexOf('mceItem') != -1) {
                    nodeName = className.replace(/mceItem([a-z]+)/gi, '$1').toLowerCase();
                    nodeData = path[i].getAttribute('title');
                }
                if (nodeName == "a" && (anchor = tinyMCE.getAttrib(path[i], "name")) != "") {
                    nodeName = "a";
                    nodeName += "#" + tinyMCE.xmlEncode(anchor);
                    nodeData = "";
                }
                if (tinyMCE.getAttrib(path[i], 'name').indexOf("mce_") != 0) {
                    var className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(path[i], "class"), false);
                    if (className != "" && className.indexOf('mceItem') == -1) {
                        nodeName += "." + className;
                    }
                }
                var cmd = 'tinyMCE.execInstanceCommand(\'' + editor_id + '\',\'mceSelectNodeDepth\',false,\'' + i + '\');';
                html += '<a title="' + nodeData + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" target="_self" class="mcePathItem">' + nodeName + '</a>';
                if (i > 0) {
                    html += " &raquo; ";
                }
            }
            pathElm.innerHTML = '<a href="#" accesskey="x"></a>' + tinyMCE.getLang('lang_theme_path') + ": " + html + '&#160;';
        }
        // Reset old states
        tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_bold', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_italic', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_underline', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_strikethrough', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_sub', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_sup', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_link', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_unlink', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonDisabled');
        tinyMCE.switchClass(editor_id + '_image', 'mceButtonNormal');
        tinyMCE.switchClass(editor_id + '_hr', 'mceButtonNormal');
        if (node.nodeName == "A" && tinyMCE.getAttrib(node, "class").indexOf('mceItemAnchor') != -1)
            tinyMCE.switchClass(editor_id + '_anchor', 'mceButtonSelected');
        // Get link
        var anchorLink = tinyMCE.getParentElement(node, "a", "href");
        if (anchorLink || any_selection) {
            tinyMCE.switchClass(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');
            tinyMCE.switchClass(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal');
        }
        // Handle visual aid
        tinyMCE.switchClass(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal');
        if (undo_levels != -1) {
            tinyMCE.switchClass(editor_id + '_undo', 'mceButtonDisabled');
            tinyMCE.switchClass(editor_id + '_redo', 'mceButtonDisabled');
        }
        // Within li, blockquote
        if (tinyMCE.getParentElement(node, "li,blockquote"))
            tinyMCE.switchClass(editor_id + '_outdent', 'mceButtonNormal');
        // Has redo levels
        if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0))
            tinyMCE.switchClass(editor_id + '_redo', 'mceButtonNormal');
        // Has undo levels
        if (undo_index != -1 && (undo_index > 0 && undo_levels > 0))
            tinyMCE.switchClass(editor_id + '_undo', 'mceButtonNormal');
        // Select class in select box
        var selectElm = document.getElementById(editor_id + "_styleSelect");
        if (selectElm) {
            TinyMCE_AdvancedTheme._setupCSSClasses(editor_id);
            classNode = node;
            breakOut = false;
            var index = 0;
            do {
                if (classNode && classNode.className) {
                    for (var i=0; i<selectElm.options.length; i++) {
                        if (selectElm.options[i].value == classNode.className) {
                            index = i;
                            breakOut = true;
                            break;
                        }
                    }
                }
            } while (!breakOut && classNode != null && (classNode = classNode.parentNode) != null);
            selectElm.selectedIndex = index;
        }
        // Select formatblock
        var selectElm = document.getElementById(editor_id + "_formatSelect");
        if (selectElm) {
            var elm = tinyMCE.getParentElement(node, "p,div,h1,h2,h3,h4,h5,h6,pre,address");
            if (elm)
                selectByValue(selectElm, "<" + elm.nodeName.toLowerCase() + ">");
            else
                selectByValue(selectElm, "");
        }
        // Select fontselect
        var selectElm = document.getElementById(editor_id + "_fontNameSelect");
        if (selectElm) {
            if (!tinyMCE.isSafari && !(tinyMCE.isMSIE && !tinyMCE.isOpera)) {
                var face = inst.queryCommandValue('FontName');
                face = face == null || face == "" ? "" : face;
                selectByValue(selectElm, face, face != "");
            } else {
                var elm = tinyMCE.getParentElement(node, "font", "face");
                if (elm) {
                    var family = tinyMCE.getAttrib(elm, "face");
                    if (family == '')
                        family = '' + elm.style.fontFamily;
                    if (!selectByValue(selectElm, family, family != ""))
                        selectByValue(selectElm, "");
                } else
                    selectByValue(selectElm, "");
            }
        }
        // Select fontsize
        var selectElm = document.getElementById(editor_id + "_fontSizeSelect");
        if (selectElm) {
            if (!tinyMCE.isSafari && !tinyMCE.isOpera) {
                var size = inst.queryCommandValue('FontSize');
                selectByValue(selectElm, size == null || size == "" ? "0" : size);
            } else {
                var elm = tinyMCE.getParentElement(node, "font", "size");
                if (elm) {
                    var size = tinyMCE.getAttrib(elm, "size");
                    if (size == '') {
                        var sizes = new Array('', '8px', '10px', '12px', '14px', '18px', '24px', '36px');
                        size = '' + elm.style.fontSize;
                        for (var i=0; i<sizes.length; i++) {
                            if (('' + sizes[i]) == size) {
                                size = i;
                                break;
                            }
                        }
                    }
                    if (!selectByValue(selectElm, size))
                        selectByValue(selectElm, "");
                } else
                    selectByValue(selectElm, "0");
            }
        }
        // Handle align attributes
        alignNode = node;
        breakOut = false;
        do {
            if (!alignNode.getAttribute || !alignNode.getAttribute('align'))
                continue;
            switch (alignNode.getAttribute('align').toLowerCase()) {
                case "left":
                    tinyMCE.switchClass(editor_id + '_justifyleft', 'mceButtonSelected');
                    breakOut = true;
                break;
                case "right":
                    tinyMCE.switchClass(editor_id + '_justifyright', 'mceButtonSelected');
                    breakOut = true;
                break;
                case "middle":
                case "center":
                    tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');
                    breakOut = true;
                break;
                case "justify":
                    tinyMCE.switchClass(editor_id + '_justifyfull', 'mceButtonSelected');
                    breakOut = true;
                break;
            }
        } while (!breakOut && (alignNode = alignNode.parentNode) != null);
        // Div justification
        var div = tinyMCE.getParentElement(node, "div");
        if (div && div.style.textAlign == "center")
            tinyMCE.switchClass(editor_id + '_justifycenter', 'mceButtonSelected');
        // Do special text
        if (!setup_content) {
            // , "JustifyLeft", "_justifyleft", "JustifyCenter", "justifycenter", "JustifyRight", "justifyright", "JustifyFull", "justifyfull", "InsertUnorderedList", "bullist", "InsertOrderedList", "numlist", "InsertUnorderedList", "bullist", "Outdent", "outdent", "Indent", "indent", "subscript", "sub"
            var ar = new Array("Bold", "_bold", "Italic", "_italic", "Strikethrough", "_strikethrough", "superscript", "_sup", "subscript", "_sub");
            for (var i=0; i<ar.length; i+=2) {
                if (inst.queryCommandState(ar[i]))
                    tinyMCE.switchClass(editor_id + ar[i+1], 'mceButtonSelected');
            }
            if (inst.queryCommandState("Underline") && (node.parentNode == null || node.parentNode.nodeName != "A"))
                tinyMCE.switchClass(editor_id + '_underline', 'mceButtonSelected');
        }
        // Handle elements
        do {
            switch (node.nodeName) {
                case "UL":
                    tinyMCE.switchClass(editor_id + '_bullist', 'mceButtonSelected');
                break;
                case "OL":
                    tinyMCE.switchClass(editor_id + '_numlist', 'mceButtonSelected');
                break;
                case "HR":
                     tinyMCE.switchClass(editor_id + '_hr', 'mceButtonSelected');
                break;
                case "IMG":
                if (tinyMCE.getAttrib(node, 'name').indexOf('mce_') != 0 && tinyMCE.getAttrib(node, 'class').indexOf('mceItem') == -1) {
                    tinyMCE.switchClass(editor_id + '_image', 'mceButtonSelected');
                }
                break;
            }
        } while ((node = node.parentNode) != null);
    },
    // Private theme internal functions
    // This function auto imports CSS classes into the class selection droplist
    _setupCSSClasses : function(editor_id) {
        var i, selectElm;
        if (!TinyMCE_AdvancedTheme._autoImportCSSClasses)
            return;
        selectElm = document.getElementById(editor_id + '_styleSelect');
        if (selectElm && selectElm.getAttribute('cssImported') != 'true') {
            var csses = tinyMCE.getCSSClasses(editor_id);
            if (csses && selectElm)    {
                for (i=0; i<csses.length; i++)
                    selectElm.options[selectElm.options.length] = new Option(csses[i], csses[i]);
            }
            // Only do this once
            if (csses != null && csses.length > 0)
                selectElm.setAttribute('cssImported', 'true');
        }
    },
    _setCookie : function(name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) +
            ((expires) ? "; expires=" + expires.toGMTString() : "") +
            ((path) ? "; path=" + escape(path) : "") +
            ((domain) ? "; domain=" + domain : "") +
            ((secure) ? "; secure" : "");
        document.cookie = curCookie;
    },
    _getCookie : function(name) {
        var dc = document.cookie;
        var prefix = name + "=";
        var begin = dc.indexOf("; " + prefix);
        if (begin == -1) {
            begin = dc.indexOf(prefix);
            if (begin != 0)
                return null;
        } else
            begin += 2;
        var end = document.cookie.indexOf(";", begin);
        if (end == -1)
            end = dc.length;
        return unescape(dc.substring(begin + prefix.length, end));
    },
    _resizeTo : function(inst, w, h, set_w) {
        var editorContainer = document.getElementById(inst.editorId + '_parent');
        var tableElm = editorContainer.firstChild;
        var iframe = inst.iframeElement;
        if (w == null || w == "null") {
            set_w = false;
            w = 0;
        }
        if (h == null || h == "null")
            return;
        w = parseInt(w);
        h = parseInt(h);
        if (tinyMCE.isGecko) {
            w += 2;
            h += 2;
        }
        var dx = w - tableElm.clientWidth;
        var dy = h - tableElm.clientHeight;
        w = w < 1 ? 30 : w;
        h = h < 1 ? 30 : h;
        if (set_w)
            tableElm.style.width = w + "px";
        tableElm.style.height = h + "px";
        iw = iframe.clientWidth + dx;
        ih = iframe.clientHeight + dy;
        iw = iw < 1 ? 30 : iw;
        ih = ih < 1 ? 30 : ih;
        if (tinyMCE.isGecko) {
            iw -= 2;
            ih -= 2;
        }
        if (set_w)
            iframe.style.width = iw + "px";
        iframe.style.height = ih + "px";
        // Is it to small, make it bigger again
        if (set_w) {
            var tableBodyElm = tableElm.firstChild;
            var minIframeWidth = tableBodyElm.scrollWidth;
            if (inst.iframeElement.clientWidth < minIframeWidth) {
                dx = minIframeWidth - inst.iframeElement.clientWidth;
                inst.iframeElement.style.width = (iw + dx) + "px";
            }
        }
        // Remove pesky table controls
        inst.useCSS = false;
    },
    /**
     * Handles resizing events.
     */
    _resizeEventHandler : function(e) {
        var resizer = TinyMCE_AdvancedTheme._resizer;
        // Do nothing
        if (!resizer.resizing)
            return;
        e = typeof(e) == "undefined" ? window.event : e;
        var dx = e.screenX - resizer.downX;
        var dy = e.screenY - resizer.downY;
        var resizeBox = resizer.resizeBox;
        var editorId = resizer.editorId;
        switch (e.type) {
            case "mousemove":
                        // Start listening
                        mf = Event.add(DOM.doc, 'mousemove', function(e) {
                var w, h;
                w = resizer.width + dx;
                h = resizer.height + dy;
                            // Calc delta values
                            r.dx = e.screenX - r.x;
                            r.dy = e.screenY - r.y;
                w = w < 1 ? 1 : w;
                h = h < 1 ? 1 : h;
                            // Boundery fix box
                            w = Math.max(miw, r.w + r.dx);
                            h = Math.max(mih, r.h + r.dy);
                            w = Math.min(maw, w);
                            h = Math.min(mah, h);
                if (resizer.horizontal)
                    resizeBox.style.width = w + "px";
                            // Resize placeholder
                            if (s.theme_advanced_resize_horizontal)
                                p.style.width = w + 'px';
                resizeBox.style.height = h + "px";
                break;
                            p.style.height = h + 'px';
            case "mouseup":
                TinyMCE_AdvancedTheme._setResizing(e, editorId, false);
                TinyMCE_AdvancedTheme._resizeTo(tinyMCE.getInstanceById(editorId), resizer.width + dx, resizer.height + dy, resizer.horizontal);
                            return Event.cancel(e);
                        });
                // Expire in a month
                if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
                    var expires = new Date();
                    expires.setTime(expires.getTime() + 3600000 * 24 * 30);
                        me = Event.add(DOM.doc, 'mouseup', function(e) {
                            var ifr;
                    // Set the cookies
                    TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_width", "" + (resizer.horizontal ? resizer.width + dx : ""), expires);
                    TinyMCE_AdvancedTheme._setCookie("TinyMCE_" + editorId + "_height", "" + (resizer.height + dy), expires);
                }
                break;
        }
    },
                            // Stop listening
                            Event.remove(DOM.doc, 'mousemove', mf);
                            Event.remove(DOM.doc, 'mouseup', me);
    /**
     * Starts/stops the editor resizing.
     */
    _setResizing : function(e, editor_id, state) {
        e = typeof(e) == "undefined" ? window.event : e;
                            c.style.display = '';
                            DOM.remove(p);
        var resizer = TinyMCE_AdvancedTheme._resizer;
        var editorContainer = document.getElementById(editor_id + '_parent');
        var editorArea = document.getElementById(editor_id + '_parent').firstChild;
        var resizeBox = document.getElementById(editor_id + '_resize_box');
        var inst = tinyMCE.getInstanceById(editor_id);
        if (state) {
            // Place box over editor area
            var width = editorArea.clientWidth;
            var height = editorArea.clientHeight;
            resizeBox.style.width = width + "px";
            resizeBox.style.height = height + "px";
            resizer.iframeWidth = inst.iframeElement.clientWidth;
            resizer.iframeHeight = inst.iframeElement.clientHeight;
            // Hide editor and show resize box
            editorArea.style.display = "none";
            resizeBox.style.display = "block";
            // Add event handlers, only once
            if (!resizer.eventHandlers) {
                if (tinyMCE.isMSIE)
                    tinyMCE.addEvent(document, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);
                else
                    tinyMCE.addEvent(window, "mousemove", TinyMCE_AdvancedTheme._resizeEventHandler);
                tinyMCE.addEvent(document, "mouseup", TinyMCE_AdvancedTheme._resizeEventHandler);
                resizer.eventHandlers = true;
            }
            resizer.resizing = true;
            resizer.downX = e.screenX;
            resizer.downY = e.screenY;
            resizer.width = parseInt(resizeBox.style.width);
            resizer.height = parseInt(resizeBox.style.height);
            resizer.editorId = editor_id;
            resizer.resizeBox = resizeBox;
            resizer.horizontal = tinyMCE.getParam("theme_advanced_resize_horizontal", true);
        } else {
            resizer.resizing = false;
            resizeBox.style.display = "none";
            editorArea.style.display = tinyMCE.isMSIE && !tinyMCE.isOpera ? "block" : "table";
            tinyMCE.execCommand('mceResetDesignMode');
        }
    },
    _getColorHTML : function(id, n, cm) {
        var i, h, cl;
        h = '<span class="mceMenuLine"></span>';
        cl = tinyMCE.getParam(n, TinyMCE_AdvancedTheme._defColors).split(',');
        h += '<table class="mceColors"><tr>';
        for (i=0; i<cl.length; i++) {
            c = 'tinyMCE.execInstanceCommand(\'' + id + '\', \'' + cm + '\', false, \'#' + cl[i] + '\');';
            h += '<td><a href="javascript:' + c + '" style="background-color: #' + cl[i] + '" onclick="' + c + ';return false;"></a></td>';
            if ((i+1) % 8 == 0)
                h += '</tr><tr>';
        }
        h += '</tr></table>';
        if (tinyMCE.getParam("theme_advanced_more_colors", true))
            h += '<a href="javascript:void(0);" onclick="TinyMCE_AdvancedTheme._pickColor(\'' + id + '\',\'' + cm + '\');" class="mceMoreColors">' + tinyMCE.getLang('lang_more_colors') + '</a>';
        return h;
    },
    _pickColor : function(id, cm) {
        var inputColor, inst = tinyMCE.selectedInstance;
        if (cm == 'forecolor' && inst)
            inputColor = inst.foreColor;
        if ((cm == 'backcolor' || cm == 'HiliteColor') && inst)
            inputColor = inst.backColor;
        tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) {
            tinyMCE.execInstanceCommand(id, cm, false, c);
        }});
    },
    _insertImage : function(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout) {
        tinyMCE.execCommand("mceInsertContent", false, tinyMCE.createTagHTML('img', {
            src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, src), // Force absolute
            mce_src : src,
            alt : alt,
            border : border,
            hspace : hspace,
            vspace : vspace,
            width : width,
            height : height,
            align : align,
            title : title,
            onmouseover : onmouseover,
            onmouseout : onmouseout
        }));
    },
    _insertLink : function(href, target, title, onclick, style_class) {
        tinyMCE.execCommand('mceBeginUndoLevel');
        if (tinyMCE.selectedInstance && tinyMCE.selectedElement && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") {
            var doc = tinyMCE.selectedInstance.getDoc();
            var linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
            var newLink = false;
            if (!linkElement) {
                linkElement = doc.createElement("a");
                newLink = true;
            }
            var mhref = href;
            var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);");
            mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
            tinyMCE.setAttrib(linkElement, 'href', thref);
            tinyMCE.setAttrib(linkElement, 'mce_href', mhref);
            tinyMCE.setAttrib(linkElement, 'target', target);
            tinyMCE.setAttrib(linkElement, 'title', title);
            tinyMCE.setAttrib(linkElement, 'onclick', onclick);
            tinyMCE.setAttrib(linkElement, 'class', style_class);
            if (newLink) {
                linkElement.appendChild(tinyMCE.selectedElement.cloneNode(true));
                tinyMCE.selectedElement.parentNode.replaceChild(linkElement, tinyMCE.selectedElement);
            }
                            if (r.dx === null)
            return;
                            ifr = DOM.get(ed.id + '_ifr');
                            if (s.theme_advanced_resize_horizontal)
                                c.style.width = Math.max(10, r.w + r.dx) + 'px';
                            c.style.height = Math.max(10, r.h + r.dy) + 'px';
                            ifr.style.height = Math.max(10, ifr.clientHeight + r.dy) + 'px';
                            if (s.theme_advanced_resizing_use_cookie) {
                                Cookie.setHash("TinyMCE_" + ed.id + "_size", {
                                    cw : r.w + r.dx,
                                    ch : r.h + r.dy
                                });
                            }
                        });
                        return Event.cancel(e);
                    });
                });
        }
        if (!tinyMCE.linkElement && tinyMCE.selectedInstance) {
            if (tinyMCE.isSafari) {
                tinyMCE.execCommand("mceInsertContent", false, '<a href="' + tinyMCE.uniqueURL + '">' + tinyMCE.selectedInstance.selection.getSelectedHTML() + '</a>');
            o.deltaHeight -= 21;
            n = tb = null;
        },
        _nodeChanged : function(ed, cm, n, co) {
            var t = this, p, de = 0, v, c, s = t.settings;
            tinymce.each(t.stateControls, function(c) {
                cm.setActive(c, ed.queryCommandState(t.controls[c][1]));
            });
            cm.setActive('visualaid', ed.hasVisual);
            cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing);
            cm.setDisabled('redo', !ed.undoManager.hasRedo());
            cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));
            p = DOM.getParent(n, 'A');
            if (c = cm.get('link')) {
                if (!p || !p.name) {
                    c.setDisabled(!p && co);
                    c.setActive(!!p);
                }
            }
            if (c = cm.get('unlink')) {
                c.setDisabled(!p && co);
                c.setActive(!!p && !p.name);
            }
            if (c = cm.get('anchor')) {
                c.setActive(!!p && p.name);
                if (tinymce.isWebKit) {
                    p = DOM.getParent(n, 'IMG');
                    c.setActive(!!p && DOM.getAttrib(p, 'mce_name') == 'a');
                }
            }
            p = DOM.getParent(n, 'IMG');
            if (c = cm.get('image'))
                c.setActive(!!p && n.className.indexOf('mceItem') == -1);
            if (c = cm.get('styleselect')) {
                if (n.className) {
                    t._importClasses();
                    c.select(n.className);
            } else
                tinyMCE.selectedInstance.contentDocument.execCommand("createlink", false, tinyMCE.uniqueURL);
            tinyMCE.linkElement = tinyMCE.getElementByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);
            var elementArray = tinyMCE.getElementsByAttributeValue(tinyMCE.selectedInstance.contentDocument.body, "a", "href", tinyMCE.uniqueURL);
            for (var i=0; i<elementArray.length; i++) {
                var mhref = href;
                var thref = eval(tinyMCE.settings['urlconverter_callback'] + "(href, elementArray[i]);");
                mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
                tinyMCE.setAttrib(elementArray[i], 'href', thref);
                tinyMCE.setAttrib(elementArray[i], 'mce_href', mhref);
                tinyMCE.setAttrib(elementArray[i], 'target', target);
                tinyMCE.setAttrib(elementArray[i], 'title', title);
                tinyMCE.setAttrib(elementArray[i], 'onclick', onclick);
                tinyMCE.setAttrib(elementArray[i], 'class', style_class);
                    c.select();
            }
            tinyMCE.linkElement = elementArray[0];
            if (c = cm.get('formatselect')) {
                p = DOM.getParent(n, DOM.isBlock);
                if (p)
                    c.select(p.nodeName.toLowerCase());
        }
        if (tinyMCE.linkElement) {
            var mhref = href;
            href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement);");
            mhref = tinyMCE.getParam('convert_urls') ? href : mhref;
            if (c = cm.get('fontselect'))
                c.select(ed.queryCommandValue('FontName'));
            tinyMCE.setAttrib(tinyMCE.linkElement, 'href', href);
            tinyMCE.setAttrib(tinyMCE.linkElement, 'mce_href', mhref);
            tinyMCE.setAttrib(tinyMCE.linkElement, 'target', target);
            tinyMCE.setAttrib(tinyMCE.linkElement, 'title', title);
            tinyMCE.setAttrib(tinyMCE.linkElement, 'onclick', onclick);
            tinyMCE.setAttrib(tinyMCE.linkElement, 'class', style_class);
            if (c = cm.get('fontsizeselect'))
                c.select(ed.queryCommandValue('FontSize'));
            if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {
                p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});
                DOM.setHTML(p, '');
                ed.dom.getParent(n, function(n) {
                    var na = n.nodeName.toLowerCase(), u, pi, ti = '';
                    // Ignore non element and hidden elements
                    if (n.nodeType != 1 || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')))
                        return;
                    // Fake name
                    if (v = DOM.getAttrib(n, 'mce_name'))
                        na = v;
                    // Handle prefix
                    if (tinymce.isIE && n.scopeName !== 'HTML')
                        na = n.scopeName + ':' + na;
                    // Remove internal prefix
                    na = na.replace(/mce\:/g, '');
                    // Handle node name
                    switch (na) {
                        case 'b':
                            na = 'strong';
                            break;
                        case 'i':
                            na = 'em';
                            break;
                        case 'img':
                            if (v = DOM.getAttrib(n, 'src'))
                                ti += 'src: ' + v + ' ';
                            break;
                        case 'a':
                            if (v = DOM.getAttrib(n, 'name')) {
                                ti += 'name: ' + v + ' ';
                                na += '#' + v;
        }
        tinyMCE.execCommand('mceEndUndoLevel');
                            if (v = DOM.getAttrib(n, 'href'))
                                ti += 'href: ' + v + ' ';
                            break;
                        case 'font':
                            if (s.convert_fonts_to_spans)
                                na = 'span';
                            if (v = DOM.getAttrib(n, 'face'))
                                ti += 'font: ' + v + ' ';
                            if (v = DOM.getAttrib(n, 'size'))
                                ti += 'size: ' + v + ' ';
                            if (v = DOM.getAttrib(n, 'color'))
                                ti += 'color: ' + v + ' ';
                            break;
                        case 'span':
                            if (v = DOM.getAttrib(n, 'style'))
                                ti += 'style: ' + v + ' ';
                            break;
    }
};
tinyMCE.addTheme("advanced", TinyMCE_AdvancedTheme);
                    if (v = DOM.getAttrib(n, 'id'))
                        ti += 'id: ' + v + ' ';
// Add default buttons maps for advanced theme and all internal plugins
tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
                    if (v = n.className) {
                        v = v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g, '');
                        if (v && v.indexOf('mceItem') == -1) {
                            ti += 'class: ' + v + ' ';
                            if (DOM.isBlock(n) || na == 'img' || na == 'span')
                                na += '.' + v;
                        }
                    }
                    na = na.replace(/(html:)/g, '');
                    na = {name : na, node : n, title : ti};
                    t.onResolveName.dispatch(t, na);
                    ti = na.title;
                    na = na.name;
                    //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";
                    pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);
                    if (p.hasChildNodes()) {
                        p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild);
                        p.insertBefore(pi, p.firstChild);
                    } else
                        p.appendChild(pi);
                }, ed.getBody());
            }
        },
        // Commands gets called by execCommand
        _sel : function(v) {
            this.editor.execCommand('mceSelectNodeDepth', false, v);
        },
        _mceInsertAnchor : function(ui, v) {
            var ed = this.editor;
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/anchor.htm',
                width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),
                height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),
                inline : true
            }, {
                theme_url : this.url
            });
        },
        _mceCharMap : function() {
            var ed = this.editor;
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/charmap.htm',
                width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),
                height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),
                inline : true
            }, {
                theme_url : this.url
            });
        },
        _mceHelp : function() {
            var ed = this.editor;
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/about.htm',
                width : 480,
                height : 380,
                inline : true
            }, {
                theme_url : this.url
            });
        },
        _mceColorPicker : function(u, v) {
            var ed = this.editor;
            v = v || {};
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/color_picker.htm',
                width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),
                height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),
                close_previous : false,
                inline : true
            }, {
                input_color : v.color,
                func : v.func,
                theme_url : this.url
            });
        },
        _mceCodeEditor : function(ui, val) {
            var ed = this.editor;
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/source_editor.htm',
                width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),
                height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),
                inline : true,
                resizable : true,
                maximizable : true
            }, {
                theme_url : this.url
            });
        },
        _mceImage : function(ui, val) {
            var ed = this.editor;
            // Internal image object like a flash placeholder
            if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)
                return;
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/image.htm',
                width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),
                height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),
                inline : true
            }, {
                theme_url : this.url
            });
        },
        _mceLink : function(ui, val) {
            var ed = this.editor;
            ed.windowManager.open({
                url : tinymce.baseURL + '/themes/advanced/link.htm',
                width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),
                height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),
                inline : true
            }, {
                theme_url : this.url
            });
        },
        _mceNewDocument : function() {
            var ed = this.editor;
            ed.windowManager.confirm('advanced.newdocument', function(s) {
                if (s)
                    ed.execCommand('mceSetContent', false, '');
            });
        },
        _mceForeColor : function() {
            var t = this;
            this._mceColorPicker(0, {
                func : function(co) {
                    t.editor.execCommand('ForeColor', false, co);
                }
            });
        },
        _mceBackColor : function() {
            var t = this;
            this._mceColorPicker(0, {
                func : function(co) {
                    t.editor.execCommand('HiliteColor', false, co);
                }
            });
        },
        _ufirst : function(s) {
            return s.substring(0, 1).toUpperCase() + s.substring(1);
        }
    });
    tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);
}());
program/js/tiny_mce/themes/advanced/image.htm
@@ -1,17 +1,18 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_insert_image_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/image.js"></script>
    <title>{#advanced_dlg.image_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="js/image.js"></script>
    <base target="_self" />
</head>
<body id="image" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<form onsubmit="insertImage();return false;" action="#">
<body id="image" style="display: none">
<form onsubmit="ImageDialog.update();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_image_title}</a></span></li>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>
        </ul>
    </div>
@@ -19,68 +20,53 @@
        <div id="general_panel" class="panel current">
     <table border="0" cellpadding="4" cellspacing="0">
          <tr>
            <td nowrap="nowrap"><label for="src">{$lang_insert_image_src}</label></td>
            <td nowrap="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
            <td><table border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td><input id="src" name="src" type="text" value="" style="width: 200px" onchange="getImageData();" /></td>
                  <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
                  <td id="srcbrowsercontainer">&nbsp;</td>
                </tr>
              </table></td>
          </tr>
          <!-- Image list -->
          <script language="javascript">
            if (typeof(tinyMCEImageList) != "undefined" && tinyMCEImageList.length > 0) {
                var html = "";
                html += '<tr><td><label for="image_list">{$lang_image_list}</label></td>';
                html += '<td><select id="image_list" name="image_list" style="width: 200px" onchange="this.form.src.value=this.options[this.selectedIndex].value;resetImageData();getImageData();">';
                html += '<option value="">---</option>';
                for (var i=0; i<tinyMCEImageList.length; i++)
                    html += '<option value="' + tinyMCEImageList[i][1] + '">' + tinyMCEImageList[i][0] + '</option>';
                html += '</select></td></tr>';
                document.write(html);
            }
          </script>
          <!-- /Image list -->
          <tr>
            <td nowrap="nowrap"><label for="alt">{$lang_insert_image_alt}</label></td>
            <td><label for="image_list">{#advanced_dlg.image_list}</label></td>
            <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
            <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="align">{$lang_insert_image_align}</label></td>
            <td><select id="align" name="align">
                <option value="">{$lang_insert_image_align_default}</option>
                <option value="baseline">{$lang_insert_image_align_baseline}</option>
                <option value="top">{$lang_insert_image_align_top}</option>
                <option value="middle">{$lang_insert_image_align_middle}</option>
                <option value="bottom">{$lang_insert_image_align_bottom}</option>
                <option value="texttop">{$lang_insert_image_align_texttop}</option>
                <option value="absmiddle">{$lang_insert_image_align_absmiddle}</option>
                <option value="absbottom">{$lang_insert_image_align_absbottom}</option>
                <option value="left">{$lang_insert_image_align_left}</option>
                <option value="right">{$lang_insert_image_align_right}</option>
            <td nowrap="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
            <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
                <option value="">{#not_set}</option>
                <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
                <option value="top">{#advanced_dlg.image_align_top}</option>
                <option value="middle">{#advanced_dlg.image_align_middle}</option>
                <option value="bottom">{#advanced_dlg.image_align_bottom}</option>
                <option value="text-top">{#advanced_dlg.image_align_texttop}</option>
                <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>
                <option value="left">{#advanced_dlg.image_align_left}</option>
                <option value="right">{#advanced_dlg.image_align_right}</option>
              </select></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="width">{$lang_insert_image_dimensions}</label></td>
            <td nowrap="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
            <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
              x
              <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="border">{$lang_insert_image_border}</label></td>
            <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" /></td>
            <td nowrap="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
            <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="vspace">{$lang_insert_image_vspace}</label></td>
            <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" /></td>
            <td nowrap="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
            <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="hspace">{$lang_insert_image_hspace}</label></td>
            <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" /></td>
            <td nowrap="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
            <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
          </tr>
        </table>
        </div>
@@ -88,11 +74,11 @@
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertImage();" />
            <input type="submit" id="insert" name="insert" value="{#insert}" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
program/js/tiny_mce/themes/advanced/images/anchor.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/backcolor.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bold.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bold_de_se.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bold_es.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bold_fr.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bold_ru.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bold_tw.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/browse.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/bullist.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/button_menu.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/buttons.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/cancel_button_bg.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/charmap.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/cleanup.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/close.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/code.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/color.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/copy.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/custom_1.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/cut.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/forecolor.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/help.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/hr.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/image.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/indent.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/insert_button_bg.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/italic.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/italic_de_se.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/italic_es.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/italic_ru.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/italic_tw.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/justifycenter.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/justifyfull.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/justifyleft.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/justifyright.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/link.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/menu_check.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/newdocument.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/numlist.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/opacity.png
Binary files differ
program/js/tiny_mce/themes/advanced/images/outdent.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/paste.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/redo.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/removeformat.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/separator.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/statusbar_resize.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/strikethrough.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/sub.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/sup.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/underline.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/underline_es.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/underline_fr.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/underline_ru.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/underline_tw.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/undo.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/unlink.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/visualaid.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/xp/tab_bg.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/xp/tab_end.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/xp/tab_sel_bg.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/xp/tab_sel_end.gif
Binary files differ
program/js/tiny_mce/themes/advanced/images/xp/tabs_bg.gif
Binary files differ
program/js/tiny_mce/themes/advanced/img/colorpicker.jpg

program/js/tiny_mce/themes/advanced/img/icons.gif
program/js/tiny_mce/themes/advanced/js/about.js
New file
@@ -0,0 +1,72 @@
tinyMCEPopup.requireLangPack();
function init() {
    var ed, tcont;
    tinyMCEPopup.resizeToInnerSize();
    ed = tinyMCEPopup.editor;
    // Give FF some time
    window.setTimeout('insertHelpIFrame();', 10);
    tcont = document.getElementById('plugintablecontainer');
    document.getElementById('plugins_tab').style.display = 'none';
    var html = "";
    html += '<table id="plugintable">';
    html += '<thead>';
    html += '<tr>';
    html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';
    html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';
    html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';
    html += '</tr>';
    html += '</thead>';
    html += '<tbody>';
    tinymce.each(ed.plugins, function(p, n) {
        var info;
        if (!p.getInfo)
            return;
        html += '<tr>';
        info = p.getInfo();
        if (info.infourl != null && info.infourl != '')
            html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';
        else
            html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';
        if (info.authorurl != null && info.authorurl != '')
            html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';
        else
            html += '<td width="35%">' + info.author + '</td>';
        html += '<td width="15%">' + info.version + '</td>';
        html += '</tr>';
        document.getElementById('plugins_tab').style.display = '';
    });
    html += '</tbody>';
    html += '</table>';
    tcont.innerHTML = html;
    tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;
    tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;
}
function insertHelpIFrame() {
    var html;
    if (tinyMCEPopup.getParam('docs_url')) {
        html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';
        document.getElementById('iframecontainer').innerHTML = html;
        document.getElementById('help_tab').style.display = 'block';
    }
}
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/themes/advanced/js/anchor.js
New file
@@ -0,0 +1,37 @@
tinyMCEPopup.requireLangPack();
var AnchorDialog = {
    init : function(ed) {
        var action, elm, f = document.forms[0];
        this.editor = ed;
        elm = ed.dom.getParent(ed.selection.getNode(), 'A,IMG');
        v = ed.dom.getAttrib(elm, 'name');
        if (v) {
            this.action = 'update';
            f.anchorName.value = v;
        }
        f.insert.value = ed.getLang(elm ? 'update' : 'insert');
    },
    update : function() {
        var ed = this.editor;
        tinyMCEPopup.restoreSelection();
        if (this.action != 'update')
            ed.selection.collapse(1);
        // Webkit acts weird if empty inline element is inserted so we need to use a image instead
        if (tinymce.isWebKit)
            ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('img', {mce_name : 'a', name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}));
        else
            ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : document.forms[0].anchorName.value, 'class' : 'mceItemAnchor'}, ''));
        tinyMCEPopup.close();
    }
};
tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);
program/js/tiny_mce/themes/advanced/js/charmap.js
File was renamed from program/js/tiny_mce/themes/advanced/jscripts/charmap.js
@@ -1,13 +1,6 @@
function init() {
    tinyMCEPopup.resizeToInnerSize();
}
tinyMCEPopup.requireLangPack();
var charmap = new Array();
// for mor details please see w3c.org
// now here is the complete list ;)
charmap = [
var charmap = [
    ['&nbsp;',    '&#160;',  true, 'no-break space'],
    ['&amp;',     '&#38;',   true, 'ampersand'],
    ['&quot;',    '&#34;',   true, 'quotation mark'],
@@ -270,32 +263,37 @@
    ['&shy;',     '&#173;',  false,'soft hyphen']
];
tinyMCEPopup.onInit.add(function() {
    tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());
});
function renderCharMapHTML() {
    var charsPerRow = 20, tdWidth=20, tdHeight=20;
    var charsPerRow = 20, tdWidth=20, tdHeight=20, i;
    var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';
    var cols=-1;
    for (var i=0; i<charmap.length; i++) {
    for (i=0; i<charmap.length; i++) {
        if (charmap[i][2]==true) {
            cols++;
            html += ''
                + '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap"'
                + ' onmouseover="this.className=\'charmapOver\';'
                + 'previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');"'
                + ' onmouseout="this.className=\'charmap\';"'
                + ' nowrap="nowrap" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');"><a style="text-decoration: none;" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
                + '<td class="charmap">'
                + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'
                + charmap[i][1]
                + '</a></td>';
            if ((cols+1) % charsPerRow == 0)
                html += '</tr><tr height="' + tdHeight + '">';
        }
     }
    if (cols % charsPerRow > 0) {
        var padd = charsPerRow - (cols % charsPerRow);
        for (var i=0; i<padd-1; i++)
            html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';
    }
    html += '</tr></table>';
    document.write(html);
    return html;
}
function insertChar(chr) {
@@ -305,6 +303,7 @@
    if (tinyMCEPopup.isWindow)
        window.focus();
    tinyMCEPopup.editor.focus();
    tinyMCEPopup.close();
}
program/js/tiny_mce/themes/advanced/js/color_picker.js
File was renamed from program/js/tiny_mce/themes/advanced/jscripts/color_picker.js
@@ -1,6 +1,8 @@
tinyMCEPopup.requireLangPack();
var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
var colors = new Array(
var colors = [
    "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",
    "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",
    "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",
@@ -28,7 +30,7 @@
    "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",
    "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",
    "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"
);
];
var named = {
    '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
@@ -57,9 +59,8 @@
};
function init() {
    var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color'));
    var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
    if (tinyMCE.isMSIE)
        tinyMCEPopup.resizeToInnerSize();
    generatePicker();
@@ -75,9 +76,13 @@
}
function insertAction() {
    var color = document.getElementById("color").value;
    var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');
    tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color);
    tinyMCEPopup.restoreSelection();
    if (f)
        f(color);
    tinyMCEPopup.close();
}
@@ -86,7 +91,7 @@
        document.getElementById("colorname").innerHTML = name;
    document.getElementById("preview").style.backgroundColor = color;
    document.getElementById("color").value = color;
    document.getElementById("color").value = color.toLowerCase();
}
function convertRGBToHex(col) {
@@ -152,9 +157,9 @@
        + '<tr>';
    for (i=0; i<colors.length; i++) {
        h += '<td bgcolor="' + colors[i] + '">'
            + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] +  '\');" onmouseover="showColor(\'' + colors[i] +  '\');">'
            + '<img border="0" src="images/spacer.gif" width="10" height="10" title="' + colors[i] +  '" alt="' + colors[i] +  '" /></a></td>';
        h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'
            + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] +  '\');" onmouseover="showColor(\'' + colors[i] +  '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'
            + '</a></td>';
        if ((i+1) % 18 == 0)
            h += '</tr><tr>';
    }
@@ -190,9 +195,9 @@
    x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);
    y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);
    partWidth = document.getElementById('colorpicker').width / 6;
    partWidth = document.getElementById('colors').width / 6;
    partDetail = detail / 2;
    imHeight = document.getElementById('colorpicker').height;
    imHeight = document.getElementById('colors').height;
    r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
    g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255    + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
@@ -237,4 +242,4 @@
    document.getElementById('color').value = color;
}
window.focus();
tinyMCEPopup.onInit.add(init);
program/js/tiny_mce/themes/advanced/js/image.js
New file
@@ -0,0 +1,245 @@
var ImageDialog = {
    preInit : function() {
        var url;
        tinyMCEPopup.requireLangPack();
        if (url = tinyMCEPopup.getParam("external_image_list_url"))
            document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
    },
    init : function() {
        var f = document.forms[0], ed = tinyMCEPopup.editor;
        // Setup browse button
        document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');
        if (isVisible('srcbrowser'))
            document.getElementById('src').style.width = '180px';
        e = ed.selection.getNode();
        this.fillFileList('image_list', 'tinyMCEImageList');
        if (e.nodeName == 'IMG') {
            f.src.value = ed.dom.getAttrib(e, 'src');
            f.alt.value = ed.dom.getAttrib(e, 'alt');
            f.border.value = this.getAttrib(e, 'border');
            f.vspace.value = this.getAttrib(e, 'vspace');
            f.hspace.value = this.getAttrib(e, 'hspace');
            f.width.value = ed.dom.getAttrib(e, 'width');
            f.height.value = ed.dom.getAttrib(e, 'height');
            f.insert.value = ed.getLang('update');
            this.styleVal = ed.dom.getAttrib(e, 'style');
            selectByValue(f, 'image_list', f.src.value);
            selectByValue(f, 'align', this.getAttrib(e, 'align'));
            this.updateStyle();
        }
    },
    fillFileList : function(id, l) {
        var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
        l = window[l];
        if (l && l.length > 0) {
            lst.options[lst.options.length] = new Option('', '');
            tinymce.each(l, function(o) {
                lst.options[lst.options.length] = new Option(o[0], o[1]);
            });
        } else
            dom.remove(dom.getParent(id, 'tr'));
    },
    update : function() {
        var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;
        tinyMCEPopup.restoreSelection();
        if (f.src.value === '') {
            if (ed.selection.getNode().nodeName == 'IMG') {
                ed.dom.remove(ed.selection.getNode());
                ed.execCommand('mceRepaint');
            }
            tinyMCEPopup.close();
            return;
        }
        if (!ed.settings.inline_styles) {
            args = tinymce.extend(args, {
                vspace : nl.vspace.value,
                hspace : nl.hspace.value,
                border : nl.border.value,
                align : getSelectValue(f, 'align')
            });
        } else
            args.style = this.styleVal;
        tinymce.extend(args, {
            src : f.src.value,
            alt : f.alt.value,
            width : f.width.value,
            height : f.height.value
        });
        el = ed.selection.getNode();
        if (el && el.nodeName == 'IMG') {
            ed.dom.setAttribs(el, args);
        } else {
            ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" src="javascript:;" />', {skip_undo : 1});
            ed.dom.setAttribs('__mce_tmp', args);
            ed.dom.setAttrib('__mce_tmp', 'id', '');
            ed.undoManager.add();
        }
        tinyMCEPopup.close();
    },
    updateStyle : function() {
        var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];
        if (tinyMCEPopup.editor.settings.inline_styles) {
            st = tinyMCEPopup.dom.parseStyle(this.styleVal);
            // Handle align
            v = getSelectValue(f, 'align');
            if (v) {
                if (v == 'left' || v == 'right') {
                    st['float'] = v;
                    delete st['vertical-align'];
                } else {
                    st['vertical-align'] = v;
                    delete st['float'];
                }
            } else {
                delete st['float'];
                delete st['vertical-align'];
            }
            // Handle border
            v = f.border.value;
            if (v || v == '0') {
                if (v == '0')
                    st['border'] = '0';
                else
                    st['border'] = v + 'px solid black';
            } else
                delete st['border'];
            // Handle hspace
            v = f.hspace.value;
            if (v) {
                delete st['margin'];
                st['margin-left'] = v + 'px';
                st['margin-right'] = v + 'px';
            } else {
                delete st['margin-left'];
                delete st['margin-right'];
            }
            // Handle vspace
            v = f.vspace.value;
            if (v) {
                delete st['margin'];
                st['margin-top'] = v + 'px';
                st['margin-bottom'] = v + 'px';
            } else {
                delete st['margin-top'];
                delete st['margin-bottom'];
            }
            // Merge
            st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st));
            this.styleVal = dom.serializeStyle(st);
        }
    },
    getAttrib : function(e, at) {
        var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;
        if (ed.settings.inline_styles) {
            switch (at) {
                case 'align':
                    if (v = dom.getStyle(e, 'float'))
                        return v;
                    if (v = dom.getStyle(e, 'vertical-align'))
                        return v;
                    break;
                case 'hspace':
                    v = dom.getStyle(e, 'margin-left')
                    v2 = dom.getStyle(e, 'margin-right');
                    if (v && v == v2)
                        return parseInt(v.replace(/[^0-9]/g, ''));
                    break;
                case 'vspace':
                    v = dom.getStyle(e, 'margin-top')
                    v2 = dom.getStyle(e, 'margin-bottom');
                    if (v && v == v2)
                        return parseInt(v.replace(/[^0-9]/g, ''));
                    break;
                case 'border':
                    v = 0;
                    tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {
                        sv = dom.getStyle(e, 'border-' + sv + '-width');
                        // False or not the same as prev
                        if (!sv || (sv != v && v !== 0)) {
                            v = 0;
                            return false;
                        }
                        if (sv)
                            v = sv;
                    });
                    if (v)
                        return parseInt(v.replace(/[^0-9]/g, ''));
                    break;
            }
        }
        if (v = dom.getAttrib(e, at))
            return v;
        return '';
    },
    resetImageData : function() {
        var f = document.forms[0];
        f.width.value = f.height.value = "";
    },
    updateImageData : function() {
        var f = document.forms[0], t = ImageDialog;
        if (f.width.value == "")
            f.width.value = t.preloadImg.width;
        if (f.height.value == "")
            f.height.value = t.preloadImg.height;
    },
    getImageData : function() {
        var f = document.forms[0];
        this.preloadImg = new Image();
        this.preloadImg.onload = this.updateImageData;
        this.preloadImg.onerror = this.resetImageData;
        this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);
    }
};
ImageDialog.preInit();
tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);
program/js/tiny_mce/themes/advanced/js/link.js
New file
@@ -0,0 +1,126 @@
tinyMCEPopup.requireLangPack();
var LinkDialog = {
    preInit : function() {
        var url;
        if (url = tinyMCEPopup.getParam("external_link_list_url"))
            document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');
    },
    init : function() {
        var f = document.forms[0], ed = tinyMCEPopup.editor;
        // Setup browse button
        document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');
        if (isVisible('hrefbrowser'))
            document.getElementById('href').style.width = '180px';
        this.fillClassList('class_list');
        this.fillFileList('link_list', 'tinyMCELinkList');
        this.fillTargetList('target_list');
        if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {
            f.href.value = ed.dom.getAttrib(e, 'href');
            f.linktitle.value = ed.dom.getAttrib(e, 'title');
            f.insert.value = ed.getLang('update');
            selectByValue(f, 'link_list', f.href.value);
            selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));
            selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));
        }
    },
    update : function() {
        var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;
        tinyMCEPopup.restoreSelection();
        // Remove element if there is no href
        if (!f.href.value) {
            e = ed.dom.getParent(ed.selection.getNode(), 'A');
            if (e) {
                tinyMCEPopup.execCommand("mceBeginUndoLevel");
                b = ed.selection.getBookmark();
                ed.dom.remove(e, 1);
                ed.selection.moveToBookmark(b);
                tinyMCEPopup.execCommand("mceEndUndoLevel");
                tinyMCEPopup.close();
                return;
            }
        }
        ed.execCommand('mceInsertLink', false, {
            href : f.href.value,
            title : f.linktitle.value,
            target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null,
            'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null
        });
        tinyMCEPopup.close();
    },
    checkPrefix : function(n) {
        if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
            n.value = 'mailto:' + n.value;
        if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
            n.value = 'http://' + n.value;
    },
    fillFileList : function(id, l) {
        var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
        l = window[l];
        if (l && l.length > 0) {
            lst.options[lst.options.length] = new Option('', '');
            tinymce.each(l, function(o) {
                lst.options[lst.options.length] = new Option(o[0], o[1]);
            });
        } else
            dom.remove(dom.getParent(id, 'tr'));
    },
    fillClassList : function(id) {
        var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
        if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {
            cl = [];
            tinymce.each(v.split(';'), function(v) {
                var p = v.split('=');
                cl.push({'title' : p[0], 'class' : p[1]});
            });
        } else
            cl = tinyMCEPopup.editor.dom.getClasses();
        if (cl.length > 0) {
            lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
            tinymce.each(cl, function(o) {
                lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);
            });
        } else
            dom.remove(dom.getParent(id, 'tr'));
    },
    fillTargetList : function(id) {
        var dom = tinyMCEPopup.dom, lst = dom.get(id), v;
        lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
        lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');
        lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');
        if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {
            tinymce.each(v.split(','), function(v) {
                v = v.split('=');
                lst.options[lst.options.length] = new Option(v[0], v[1]);
            });
        }
    }
};
LinkDialog.preInit();
tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);
program/js/tiny_mce/themes/advanced/js/source_editor.js
New file
@@ -0,0 +1,62 @@
tinyMCEPopup.requireLangPack();
tinyMCEPopup.onInit.add(onLoadInit);
function saveContent() {
    tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value);
    tinyMCEPopup.close();
}
function onLoadInit() {
    tinyMCEPopup.resizeToInnerSize();
    // Remove Gecko spellchecking
    if (tinymce.isGecko)
        document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
    document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent();
    if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
        setWrap('soft');
        document.getElementById('wraped').checked = true;
    }
    resizeInputs();
}
function setWrap(val) {
    var v, n, s = document.getElementById('htmlSource');
    s.wrap = val;
    if (!tinymce.isIE) {
        v = s.value;
        n = s.cloneNode(false);
        n.setAttribute("wrap", val);
        s.parentNode.replaceChild(n, s);
        n.value = v;
    }
}
function toggleWordWrap(elm) {
    if (elm.checked)
        setWrap('soft');
    else
        setWrap('off');
}
var wHeight=0, wWidth=0, owHeight=0, owWidth=0;
function resizeInputs() {
    var el = document.getElementById('htmlSource');
    if (!tinymce.isIE) {
         wHeight = self.innerHeight - 65;
         wWidth = self.innerWidth - 16;
    } else {
         wHeight = document.body.clientHeight - 70;
         wWidth = document.body.clientWidth - 16;
    }
    el.style.height = Math.abs(wHeight) + 'px';
    el.style.width  = Math.abs(wWidth) + 'px';
}
program/js/tiny_mce/themes/advanced/jscripts/about.js
File was deleted
program/js/tiny_mce/themes/advanced/jscripts/anchor.js
File was deleted
program/js/tiny_mce/themes/advanced/jscripts/image.js
File was deleted
program/js/tiny_mce/themes/advanced/jscripts/link.js
File was deleted
program/js/tiny_mce/themes/advanced/jscripts/source_editor.js
File was deleted
program/js/tiny_mce/themes/advanced/langs/en.js
@@ -1,93 +1,62 @@
// UK lang variables
tinyMCE.addToLang('',{
theme_style_select : '-- Styles --',
theme_code_desc : 'Edit HTML Source',
theme_code_title : 'HTML Source Editor',
theme_code_wordwrap : 'Word wrap',
theme_sub_desc : 'Subscript',
theme_sup_desc : 'Superscript',
theme_hr_desc : 'Insert horizontal ruler',
theme_removeformat_desc : 'Remove formatting',
theme_custom1_desc : 'Your custom description here',
insert_image_border : 'Border',
insert_image_dimensions : 'Dimensions',
insert_image_vspace : 'Vertical space',
insert_image_hspace : 'Horizontal space',
insert_image_align : 'Alignment',
insert_image_align_default : '-- Not set --',
insert_image_align_baseline : 'Baseline',
insert_image_align_top : 'Top',
insert_image_align_middle : 'Middle',
insert_image_align_bottom : 'Bottom',
insert_image_align_texttop : 'TextTop',
insert_image_align_absmiddle : 'Absolute Middle',
insert_image_align_absbottom : 'Absolute Bottom',
insert_image_align_left : 'Left',
insert_image_align_right : 'Right',
theme_font_size : '-- Font size --',
theme_fontdefault : '-- Font family --',
theme_block : '-- Format --',
theme_paragraph : 'Paragraph',
theme_div : 'Div',
theme_address : 'Address',
theme_pre : 'Preformatted',
theme_h1 : 'Heading 1',
theme_h2 : 'Heading 2',
theme_h3 : 'Heading 3',
theme_h4 : 'Heading 4',
theme_h5 : 'Heading 5',
theme_h6 : 'Heading 6',
theme_blockquote : 'Blockquote',
theme_code : 'Code',
theme_samp : 'Code sample',
theme_dt : 'Definition term ',
theme_dd : 'Definition description',
theme_colorpicker_title : 'Select a color',
theme_colorpicker_apply : 'Apply',
theme_forecolor_desc : 'Select text color',
theme_backcolor_desc : 'Select background color',
theme_charmap_title : 'Select custom character',
theme_charmap_desc : 'Insert custom character',
theme_visualaid_desc : 'Toggle guidelines/invisible elements',
insert_anchor_title : 'Insert/edit anchor',
insert_anchor_name : 'Anchor name',
theme_anchor_desc : 'Insert/edit anchor',
theme_insert_link_titlefield : 'Title',
theme_clipboard_msg : 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?',
theme_path : 'Path',
cut_desc : 'Cut',
copy_desc : 'Copy',
paste_desc : 'Paste',
link_list : 'Link list',
image_list : 'Image list',
browse : 'Browse',
image_props_desc : 'Image properties',
newdocument_desc : 'New document',
class_name : 'Class',
newdocument : 'Are you sure you want clear all contents?',
about_title : 'About TinyMCE',
about : 'About',
license : 'License',
plugins : 'Plugins',
plugin : 'Plugin',
author : 'Author',
version : 'Version',
loaded_plugins : 'Loaded plugins',
help : 'Help',
not_set : '-- Not set --',
close : 'Close',
toolbar_focus : 'Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X',
invalid_data : 'Error: Invalid values entered, these are marked in red.',
more_colors : 'More colors',
color_picker_tab : 'Picker',
color_picker : 'Color picker',
web_colors_tab : 'Palette',
web_colors : 'Palette colors',
named_colors_tab : 'Named',
named_colors : 'Named colors',
color : 'Color:',
color_name : 'Name:',
is_email : 'The URL you entered seems to be an email address, do you want to add the required mailto: prefix?',
is_external : 'The URL you entered seems to external link, do you want to add the required http:// prefix?'
tinyMCE.addI18n('en.advanced',{
style_select:"Styles",
font_size:"Font size",
fontdefault:"Font family",
block:"Format",
paragraph:"Paragraph",
div:"Div",
address:"Address",
pre:"Preformatted",
h1:"Heading 1",
h2:"Heading 2",
h3:"Heading 3",
h4:"Heading 4",
h5:"Heading 5",
h6:"Heading 6",
blockquote:"Blockquote",
code:"Code",
samp:"Code sample",
dt:"Definition term ",
dd:"Definition description",
bold_desc:"Bold (Ctrl+B)",
italic_desc:"Italic (Ctrl+I)",
underline_desc:"Underline (Ctrl+U)",
striketrough_desc:"Strikethrough",
justifyleft_desc:"Align left",
justifycenter_desc:"Align center",
justifyright_desc:"Align right",
justifyfull_desc:"Align full",
bullist_desc:"Unordered list",
numlist_desc:"Ordered list",
outdent_desc:"Outdent",
indent_desc:"Indent",
undo_desc:"Undo (Ctrl+Z)",
redo_desc:"Redo (Ctrl+Y)",
link_desc:"Insert/edit link",
unlink_desc:"Unlink",
image_desc:"Insert/edit image",
cleanup_desc:"Cleanup messy code",
code_desc:"Edit HTML Source",
sub_desc:"Subscript",
sup_desc:"Superscript",
hr_desc:"Insert horizontal ruler",
removeformat_desc:"Remove formatting",
custom1_desc:"Your custom description here",
forecolor_desc:"Select text color",
backcolor_desc:"Select background color",
charmap_desc:"Insert custom character",
visualaid_desc:"Toggle guidelines/invisible elements",
anchor_desc:"Insert/edit anchor",
cut_desc:"Cut",
copy_desc:"Copy",
paste_desc:"Paste",
image_props_desc:"Image properties",
newdocument_desc:"New document",
help_desc:"Help",
blockquote_desc:"Blockquote",
clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?",
path:"Path",
newdocument:"Are you sure you want clear all contents?",
toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",
more_colors:"More colors"
});
program/js/tiny_mce/themes/advanced/langs/en_dlg.js
New file
@@ -0,0 +1,51 @@
tinyMCE.addI18n('en.advanced_dlg',{
about_title:"About TinyMCE",
about_general:"About",
about_help:"Help",
about_license:"License",
about_plugins:"Plugins",
about_plugin:"Plugin",
about_author:"Author",
about_version:"Version",
about_loaded:"Loaded plugins",
anchor_title:"Insert/edit anchor",
anchor_name:"Anchor name",
code_title:"HTML Source Editor",
code_wordwrap:"Word wrap",
colorpicker_title:"Select a color",
colorpicker_picker_tab:"Picker",
colorpicker_picker_title:"Color picker",
colorpicker_palette_tab:"Palette",
colorpicker_palette_title:"Palette colors",
colorpicker_named_tab:"Named",
colorpicker_named_title:"Named colors",
colorpicker_color:"Color:",
colorpicker_name:"Name:",
charmap_title:"Select custom character",
image_title:"Insert/edit image",
image_src:"Image URL",
image_alt:"Image description",
image_list:"Image list",
image_border:"Border",
image_dimensions:"Dimensions",
image_vspace:"Vertical space",
image_hspace:"Horizontal space",
image_align:"Alignment",
image_align_baseline:"Baseline",
image_align_top:"Top",
image_align_middle:"Middle",
image_align_bottom:"Bottom",
image_align_texttop:"Text top",
image_align_textbottom:"Text bottom",
image_align_left:"Left",
image_align_right:"Right",
link_title:"Insert/edit link",
link_url:"Link URL",
link_target:"Target",
link_target_same:"Open link in the same window",
link_target_blank:"Open link in a new window",
link_titlefield:"Title",
link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",
link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",
link_list:"Link list"
});
program/js/tiny_mce/themes/advanced/link.htm
@@ -1,18 +1,19 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>{$lang_insert_link_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/mctabs.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/form_utils.js"></script>
    <script language="javascript" type="text/javascript" src="../../utils/validate.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/link.js"></script>
    <title>{#advanced_dlg.link_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="../../utils/mctabs.js"></script>
    <script type="text/javascript" src="../../utils/form_utils.js"></script>
    <script type="text/javascript" src="../../utils/validate.js"></script>
    <script type="text/javascript" src="js/link.js"></script>
    <base target="_self" />
</head>
<body id="link" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<form onsubmit="insertLink();return false;" action="#">
<body id="link" style="display: none">
<form onsubmit="LinkDialog.update();return false;" action="#">
    <div class="tabs">
        <ul>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{$lang_insert_link_title}</a></span></li>
            <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>
        </ul>
    </div>
@@ -21,67 +22,29 @@
        <table border="0" cellpadding="4" cellspacing="0">
          <tr>
            <td nowrap="nowrap"><label for="href">{$lang_insert_link_url}</label></td>
            <td nowrap="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
            <td><table border="0" cellspacing="0" cellpadding="0"> 
                  <tr> 
                    <td><input id="href" name="href" type="text" value="" style="width: 200px" onchange="checkPrefix(this);" /></td>
                    <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td>
                    <td id="hrefbrowsercontainer">&nbsp;</td>
                  </tr> 
                </table></td>
          </tr>
          <!-- Link list -->
          <script language="javascript">
            if (typeof(tinyMCELinkList) != "undefined" && tinyMCELinkList.length > 0) {
                var html = "";
                html += '<tr><td><label for="link_list">{$lang_link_list}</label></td>';
                html += '<td><select id="link_list" name="link_list" style="width: 200px" onchange="this.form.href.value=this.options[this.selectedIndex].value;">';
                html += '<option value="">---</option>';
                for (var i=0; i<tinyMCELinkList.length; i++)
                    html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';
                html += '</select></td></tr>';
                document.write(html);
            }
          </script>
          <!-- /Link list -->
          <tr>
            <td nowrap="nowrap"><label for="target">{$lang_insert_link_target}</label></td>
            <td><select id="target" name="target" style="width: 200px">
                <option value="_self">{$lang_insert_link_target_same}</option>
                <option value="_blank">{$lang_insert_link_target_blank}</option>
                <script language="javascript">
                    var html = "";
                    var targets = tinyMCE.getParam('theme_advanced_link_targets', '').split(';');
                    for (var i=0; i<targets.length; i++) {
                        var key, value;
                        if (targets[i] == "")
                            continue;
                        key = targets[i].split('=')[0];
                        value = targets[i].split('=')[1];
                        html += '<option value="' + value + '">' + key + '</option>';
                    }
                    document.write(html);
                </script>
            </select></td>
            <td><label for="link_list">{#advanced_dlg.link_list}</label></td>
            <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="linktitle">{$lang_theme_insert_link_titlefield}</label></td>
            <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px"></td>
            <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
            <td><select id="target_list" name="target_list"></select></td>
          </tr>
          <tr id="styleSelectRow">
            <td><label for="styleSelect">{$lang_class_name}</label></td>
            <td>
             <select id="styleSelect" name="styleSelect">
                <option value="" selected>{$lang_theme_style_select}</option>
             </select></td>
          <tr>
            <td nowrap="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
            <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
          </tr>
            <tr>
                <td><label for="class_list">{#class_name}</label></td>
                <td><select id="class_list" name="class_list"></select></td>
          </tr>
        </table>
        </div>
@@ -89,11 +52,11 @@
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertLink();" />
            <input type="submit" id="insert" name="insert" value="{#insert}" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
            <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
program/js/tiny_mce/themes/advanced/skins/default/content.css
New file
@@ -0,0 +1,25 @@
body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
body {background:#FFF;}
body.mceForceColors {background:#FFF; color:#000;}
h1 {font-size: 2em}
h2 {font-size: 1.5em}
h3 {font-size: 1.17em}
h4 {font-size: 1em}
h5 {font-size: .83em}
h6 {font-size: .75em}
.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;}
img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;}
img {border:0;}
/* IE */
* html body {
scrollbar-3dlight-color:#F0F0EE;
scrollbar-arrow-color:#676662;
scrollbar-base-color:#F0F0EE;
scrollbar-darkshadow-color:#DDD;
scrollbar-face-color:#E0E0DD;
scrollbar-highlight-color:#F0F0EE;
scrollbar-shadow-color:#F0F0EE;
scrollbar-track-color:#F5F5F5;
}
program/js/tiny_mce/themes/advanced/skins/default/dialog.css
New file
@@ -0,0 +1,114 @@
/* Generic */
body {
font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
scrollbar-3dlight-color:#F0F0EE;
scrollbar-arrow-color:#676662;
scrollbar-base-color:#F0F0EE;
scrollbar-darkshadow-color:#DDDDDD;
scrollbar-face-color:#E0E0DD;
scrollbar-highlight-color:#F0F0EE;
scrollbar-shadow-color:#F0F0EE;
scrollbar-track-color:#F5F5F5;
background:#F0F0EE;
padding:0;
margin:8px 8px 0 8px;
}
html {background:#F0F0EE;}
td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
textarea {resize:none;outline:none;}
a:link, a:visited {color:black;}
a:hover {color:#2B6FB6;}
/* Forms */
fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
legend {color:#2B6FB6; font-weight:bold;}
label.msg {display:none;}
label.invalid {color:#EE0000; display:inline;}
input.invalid {border:1px solid #EE0000;}
input {background:#FFF; border:1px solid #CCC;}
input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
input, select, textarea {border:1px solid #808080;}
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
.input_noborder {border:0;}
/* Buttons */
#insert, #cancel, input.button, .updateButton {
border:0; margin:0; padding:0;
font-weight:bold;
width:94px; height:26px;
background:url(img/buttons.png) 0 -26px;
cursor:pointer;
padding-bottom:2px;
}
#insert {background:url(img/buttons.png) 0 -52px;}
#cancel {background:url(img/buttons.png) 0 0;}
/* Browse */
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
.mceOldBoxModel a.browse span {width:22px; height:20px;}
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);}
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
a.pickcolor:hover span {background-color:#B2BBD0;}
a.pickcolor:hover span.disabled {}
/* Charmap */
table.charmap {border:1px solid #AAA; text-align:center}
td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
#charmap a {display:block; color:#000; text-decoration:none; border:0}
#charmap a:hover {background:#CCC;color:#2B6FB6}
#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
/* Source */
.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
.mceActionPanel {margin-top:5px;}
/* Tabs classes */
.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}
.tabs ul {margin:0; padding:0; list-style:none;}
.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}
.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
/* Panels */
.panel_wrapper div.panel {display:none;}
.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
/* Columns */
.column {float:left;}
.properties {width:100%;}
.properties .column1 {}
.properties .column2 {text-align:left;}
/* Titles */
h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
h3 {font-size:14px;}
.title {font-size:12px; font-weight:bold; color:#2B6FB6;}
/* Dialog specific */
#link .panel_wrapper, #link div.current {height:125px;}
#image .panel_wrapper, #image div.current {height:200px;}
#plugintable thead {font-weight:bold; background:#DDD;}
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
#plugintable {width:96%; margin-top:10px;}
#pluginscontainer {height:290px; overflow:auto;}
#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
#colorpicker #light div {overflow:hidden;}
#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
#colorpicker .panel_wrapper div.current {height:175px;}
#colorpicker #namedcolors {width:150px;}
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
#colorpicker #colornamecontainer {margin-top:5px;}
#colorpicker #picker_panel fieldset {margin:auto;width:325px;}
program/js/tiny_mce/themes/advanced/skins/default/img/buttons.png
program/js/tiny_mce/themes/advanced/skins/default/img/items.gif

program/js/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
program/js/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
program/js/tiny_mce/themes/advanced/skins/default/img/progress.gif
program/js/tiny_mce/themes/advanced/skins/default/img/tabs.gif
program/js/tiny_mce/themes/advanced/skins/default/ui.css
New file
@@ -0,0 +1,211 @@
/* Reset */
.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
.defaultSkin table td {vertical-align:middle}
/* Containers */
.defaultSkin table {background:#F0F0EE}
.defaultSkin iframe {display:block; background:#FFF}
.defaultSkin .mceToolbar {height:26px}
.defaultSkin .mceLeft {text-align:left}
.defaultSkin .mceRight {text-align:right}
/* External */
.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}
.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
/* Layout */
.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}
.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}
.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}
.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}
.defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top}
.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}
.defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}
.defaultSkin .mceStatusbar div {float:left; margin:2px}
.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
.defaultSkin .mceStatusbar a:hover {text-decoration:underline}
.defaultSkin table.mceToolbar {margin-left:3px}
.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}
.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
.defaultSkin td.mceCenter {text-align:center;}
.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}
.defaultSkin td.mceRight table {margin:0 0 0 auto;}
/* Button */
.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px;}
.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}
.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)}
/* Separator */
.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}
/* ListBox */
.defaultSkin .mceListBox {direction:ltr}
.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}
.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}
.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}
.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}
.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}
.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}
.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}
.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}
/* SplitButton */
.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}
.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}
.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}
.defaultSkin .mceSplitButton span.mceAction {width:20px; background:url(../../img/icons.gif) 20px 20px;}
.defaultSkin .mceSplitButton a.mceOpen {width:9px; border:1px solid #F0F0EE;}
.defaultSkin .mceSplitButton span.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0;}
.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}
.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {border:1px solid #0A246A;}
.defaultSkin table.mceSplitButtonEnabled:hover span.mceOpen, .defaultSkin .mceSplitButtonHover span.mceOpen, .defaultSkin .mceSplitButtonSelected span.mceOpen {background-color:#B2BBD0}
.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled span.mceOpen {opacity:0.3; filter:alpha(opacity=30)}
.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}
.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}
/* ColorSplitButton */
.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
.defaultSkin .mceColorSplitMenu td {padding:2px}
.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}
.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}
/* Menu */
.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}
.defaultSkin .mceNoIcons span.mceIcon {width:0;}
.defaultSkin .mceNoIcons a .mceText {padding-left:10px}
.defaultSkin .mceMenu table {background:#FFF}
.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}
.defaultSkin .mceMenu td {height:20px}
.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}
.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}
.defaultSkin .mceMenu pre.mceText {font-family:Monospace}
.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}
.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}
.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
.defaultSkin .mceMenuItemDisabled .mceText {color:#888}
.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}
.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}
.defaultSkin .mceMenu span.mceMenuLine {display:none}
.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}
/* Progress,Resize */
.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF}
.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
.defaultSkin .mcePlaceHolder {border:1px dotted gray}
/* Formats */
.defaultSkin .mce_formatPreview a {font-size:10px}
.defaultSkin .mce_p span.mceText {}
.defaultSkin .mce_address span.mceText {font-style:italic}
.defaultSkin .mce_pre span.mceText {font-family:monospace}
.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
/* Theme */
.defaultSkin span.mce_bold {background-position:0 0}
.defaultSkin span.mce_italic {background-position:-60px 0}
.defaultSkin span.mce_underline {background-position:-140px 0}
.defaultSkin span.mce_strikethrough {background-position:-120px 0}
.defaultSkin span.mce_undo {background-position:-160px 0}
.defaultSkin span.mce_redo {background-position:-100px 0}
.defaultSkin span.mce_cleanup {background-position:-40px 0}
.defaultSkin span.mce_bullist {background-position:-20px 0}
.defaultSkin span.mce_numlist {background-position:-80px 0}
.defaultSkin span.mce_justifyleft {background-position:-460px 0}
.defaultSkin span.mce_justifyright {background-position:-480px 0}
.defaultSkin span.mce_justifycenter {background-position:-420px 0}
.defaultSkin span.mce_justifyfull {background-position:-440px 0}
.defaultSkin span.mce_anchor {background-position:-200px 0}
.defaultSkin span.mce_indent {background-position:-400px 0}
.defaultSkin span.mce_outdent {background-position:-540px 0}
.defaultSkin span.mce_link {background-position:-500px 0}
.defaultSkin span.mce_unlink {background-position:-640px 0}
.defaultSkin span.mce_sub {background-position:-600px 0}
.defaultSkin span.mce_sup {background-position:-620px 0}
.defaultSkin span.mce_removeformat {background-position:-580px 0}
.defaultSkin span.mce_newdocument {background-position:-520px 0}
.defaultSkin span.mce_image {background-position:-380px 0}
.defaultSkin span.mce_help {background-position:-340px 0}
.defaultSkin span.mce_code {background-position:-260px 0}
.defaultSkin span.mce_hr {background-position:-360px 0}
.defaultSkin span.mce_visualaid {background-position:-660px 0}
.defaultSkin span.mce_charmap {background-position:-240px 0}
.defaultSkin span.mce_paste {background-position:-560px 0}
.defaultSkin span.mce_copy {background-position:-700px 0}
.defaultSkin span.mce_cut {background-position:-680px 0}
.defaultSkin span.mce_blockquote {background-position:-220px 0}
.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}
.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}
.defaultSkin .mce_forecolorpicker {background-position:-720px 0}
.defaultSkin .mce_backcolorpicker {background-position:-760px 0}
/* Plugins */
.defaultSkin span.mce_advhr {background-position:-0px -20px}
.defaultSkin span.mce_ltr {background-position:-20px -20px}
.defaultSkin span.mce_rtl {background-position:-40px -20px}
.defaultSkin span.mce_emotions {background-position:-60px -20px}
.defaultSkin span.mce_fullpage {background-position:-80px -20px}
.defaultSkin span.mce_fullscreen {background-position:-100px -20px}
.defaultSkin span.mce_iespell {background-position:-120px -20px}
.defaultSkin span.mce_insertdate {background-position:-140px -20px}
.defaultSkin span.mce_inserttime {background-position:-160px -20px}
.defaultSkin span.mce_absolute {background-position:-180px -20px}
.defaultSkin span.mce_backward {background-position:-200px -20px}
.defaultSkin span.mce_forward {background-position:-220px -20px}
.defaultSkin span.mce_insert_layer {background-position:-240px -20px}
.defaultSkin span.mce_insertlayer {background-position:-260px -20px}
.defaultSkin span.mce_movebackward {background-position:-280px -20px}
.defaultSkin span.mce_moveforward {background-position:-300px -20px}
.defaultSkin span.mce_media {background-position:-320px -20px}
.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}
.defaultSkin span.mce_pastetext {background-position:-360px -20px}
.defaultSkin span.mce_pasteword {background-position:-380px -20px}
.defaultSkin span.mce_selectall {background-position:-400px -20px}
.defaultSkin span.mce_preview {background-position:-420px -20px}
.defaultSkin span.mce_print {background-position:-440px -20px}
.defaultSkin span.mce_cancel {background-position:-460px -20px}
.defaultSkin span.mce_save {background-position:-480px -20px}
.defaultSkin span.mce_replace {background-position:-500px -20px}
.defaultSkin span.mce_search {background-position:-520px -20px}
.defaultSkin span.mce_styleprops {background-position:-560px -20px}
.defaultSkin span.mce_table {background-position:-580px -20px}
.defaultSkin span.mce_cell_props {background-position:-600px -20px}
.defaultSkin span.mce_delete_table {background-position:-620px -20px}
.defaultSkin span.mce_delete_col {background-position:-640px -20px}
.defaultSkin span.mce_delete_row {background-position:-660px -20px}
.defaultSkin span.mce_col_after {background-position:-680px -20px}
.defaultSkin span.mce_col_before {background-position:-700px -20px}
.defaultSkin span.mce_row_after {background-position:-720px -20px}
.defaultSkin span.mce_row_before {background-position:-740px -20px}
.defaultSkin span.mce_merge_cells {background-position:-760px -20px}
.defaultSkin span.mce_table_props {background-position:-980px -20px}
.defaultSkin span.mce_row_props {background-position:-780px -20px}
.defaultSkin span.mce_split_cells {background-position:-800px -20px}
.defaultSkin span.mce_template {background-position:-820px -20px}
.defaultSkin span.mce_visualchars {background-position:-840px -20px}
.defaultSkin span.mce_abbr {background-position:-860px -20px}
.defaultSkin span.mce_acronym {background-position:-880px -20px}
.defaultSkin span.mce_attribs {background-position:-900px -20px}
.defaultSkin span.mce_cite {background-position:-920px -20px}
.defaultSkin span.mce_del {background-position:-940px -20px}
.defaultSkin span.mce_ins {background-position:-960px -20px}
.defaultSkin span.mce_pagebreak {background-position:0 -40px}
.defaultSkin .mce_spellchecker span.mceAction {background-position:-540px -20px}
program/js/tiny_mce/themes/advanced/skins/o2k7/content.css
New file
@@ -0,0 +1,25 @@
body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}
body {background:#FFF;}
body.mceForceColors {background:#FFF; color:#000;}
h1 {font-size: 2em}
h2 {font-size: 1.5em}
h3 {font-size: 1.17em}
h4 {font-size: 1em}
h5 {font-size: .83em}
h6 {font-size: .75em}
.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}
a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(../default/img/items.gif) no-repeat bottom left;}
img.mceItemAnchor {width:12px; height:12px; background:url(../default/img/items.gif) no-repeat;}
img {border:0;}
/* IE */
* html body {
scrollbar-3dlight-color:#F0F0EE;
scrollbar-arrow-color:#676662;
scrollbar-base-color:#F0F0EE;
scrollbar-darkshadow-color:#DDD;
scrollbar-face-color:#E0E0DD;
scrollbar-highlight-color:#F0F0EE;
scrollbar-shadow-color:#F0F0EE;
scrollbar-track-color:#F5F5F5;
}
program/js/tiny_mce/themes/advanced/skins/o2k7/dialog.css
New file
@@ -0,0 +1,113 @@
/* Generic */
body {
font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;
scrollbar-3dlight-color:#F0F0EE;
scrollbar-arrow-color:#676662;
scrollbar-base-color:#F0F0EE;
scrollbar-darkshadow-color:#DDDDDD;
scrollbar-face-color:#E0E0DD;
scrollbar-highlight-color:#F0F0EE;
scrollbar-shadow-color:#F0F0EE;
scrollbar-track-color:#F5F5F5;
background:#F0F0EE;
padding:0;
margin:8px 8px 0 8px;
}
html {background:#F0F0EE;}
td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
textarea {resize:none;outline:none;}
a:link, a:visited {color:black;}
a:hover {color:#2B6FB6;}
/* Forms */
fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
legend {color:#2B6FB6; font-weight:bold;}
label.msg {display:none;}
label.invalid {color:#EE0000; display:inline;}
input.invalid {border:1px solid #EE0000;}
input {background:#FFF; border:1px solid #CCC;}
input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
input, select, textarea {border:1px solid #808080;}
input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}
input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}
.input_noborder {border:0;}
/* Buttons */
#insert, #cancel, input.button, .updateButton {
border:0; margin:0; padding:0;
font-weight:bold;
width:94px; height:26px;
background:url(../default/img/buttons.png) 0 -26px;
cursor:pointer;
padding-bottom:2px;
}
#insert {background:url(../default/img/buttons.png) 0 -52px;}
#cancel {background:url(../default/img/buttons.png) 0 0;}
/* Browse */
a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
.mceOldBoxModel a.browse span {width:22px; height:20px;}
a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
a.browse span.disabled {border:1px solid white; -moz-opacity:0.3; opacity:0.3; filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30);}
a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}
a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}
.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}
a.pickcolor:hover span {background-color:#B2BBD0;}
a.pickcolor:hover span.disabled {}
/* Charmap */
table.charmap {border:1px solid #AAA; text-align:center}
td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}
#charmap a {display:block; color:#000; text-decoration:none; border:0}
#charmap a:hover {background:#CCC;color:#2B6FB6}
#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}
#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}
/* Source */
.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}
.mceActionPanel {margin-top:5px;}
/* Tabs classes */
.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}
.tabs ul {margin:0; padding:0; list-style:none;}
.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}
.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}
.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}
.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}
.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}
.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}
/* Panels */
.panel_wrapper div.panel {display:none;}
.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}
.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}
/* Columns */
.column {float:left;}
.properties {width:100%;}
.properties .column1 {}
.properties .column2 {text-align:left;}
/* Titles */
h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}
h3 {font-size:14px;}
.title {font-size:12px; font-weight:bold; color:#2B6FB6;}
/* Dialog specific */
#link .panel_wrapper, #link div.current {height:125px;}
#image .panel_wrapper, #image div.current {height:200px;}
#plugintable thead {font-weight:bold; background:#DDD;}
#plugintable, #about #plugintable td {border:1px solid #919B9C;}
#plugintable {width:96%; margin-top:10px;}
#pluginscontainer {height:290px; overflow:auto;}
#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}
#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}
#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}
#colorpicker #light div {overflow:hidden;}
#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}
#colorpicker .panel_wrapper div.current {height:175px;}
#colorpicker #namedcolors {width:150px;}
#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}
#colorpicker #colornamecontainer {margin-top:5px;}
program/js/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
program/js/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
program/js/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
program/js/tiny_mce/themes/advanced/skins/o2k7/ui.css
New file
@@ -0,0 +1,211 @@
/* Reset */
.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}
.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}
.o2k7Skin table td {vertical-align:middle}
/* Containers */
.o2k7Skin table {background:#E5EFFD}
.o2k7Skin iframe {display:block; background:#FFF}
.o2k7Skin .mceToolbar {height:26px}
/* External */
.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}
.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}
.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}
/* Layout */
.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}
.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}
.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}
.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}
.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}
.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}
.o2k7Skin .mceStatusbar div {float:left; padding:2px}
.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize}
.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}
.o2k7Skin table.mceToolbar {margin-left:3px}
.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}
.o2k7Skin .mceToolbar td.mceFirst span {margin:0}
.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}
.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}
.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
.o2k7Skin td.mceCenter {text-align:center;}
.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}
.o2k7Skin td.mceRight table {margin:0 0 0 auto;}
/* Button */
.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}
.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}
.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}
.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30)}
/* Separator */
.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}
/* ListBox */
.o2k7Skin .mceListBox {margin-left:3px}
.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}
.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}
.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}
.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}
.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}
.o2k7Skin .mceListBoxDisabled .mceText {color:gray}
.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden}
.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}
.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}
/* SplitButton */
.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px}
.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}
.o2k7Skin .mceSplitButton a.mceAction {width:22px}
.o2k7Skin .mceSplitButton span.mceAction {width:22px; background:url(../../img/icons.gif) 20px 20px}
.o2k7Skin .mceSplitButton a.mceOpen {width:10px}
.o2k7Skin .mceSplitButton span.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}
.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}
.o2k7Skin table.mceSplitButtonEnabled:hover span.mceOpen, .o2k7Skin .mceSplitButtonHover span.mceOpen, .o2k7Skin .mceSplitButtonSelected span.mceOpen {background-position:-44px -44px}
.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; filter:alpha(opacity=30)}
.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}
/* ColorSplitButton */
.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}
.o2k7Skin .mceColorSplitMenu td {padding:2px}
.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}
.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}
.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}
.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}
.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}
.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}
.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px}
/* Menu */
.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}
.o2k7Skin .mceNoIcons span.mceIcon {width:0;}
.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}
.o2k7Skin .mceMenu table {background:#FFF}
.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}
.o2k7Skin .mceMenu td {height:20px}
.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}
.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}
.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}
.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}
.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}
.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}
.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}
.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}
.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}
.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}
.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}
.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}
.o2k7Skin .mceMenu span.mceMenuLine {display:none}
.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}
/* Progress,Resize */
.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; filter:alpha(opacity=50); background:#FFF}
.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}
.o2k7Skin .mcePlaceHolder {border:1px dotted gray}
/* Formats */
.o2k7Skin .mce_formatPreview a {font-size:10px}
.o2k7Skin .mce_p span.mceText {}
.o2k7Skin .mce_address span.mceText {font-style:italic}
.o2k7Skin .mce_pre span.mceText {font-family:monospace}
.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}
.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}
.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}
.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}
.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}
.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}
/* Theme */
.o2k7Skin span.mce_bold {background-position:0 0}
.o2k7Skin span.mce_italic {background-position:-60px 0}
.o2k7Skin span.mce_underline {background-position:-140px 0}
.o2k7Skin span.mce_strikethrough {background-position:-120px 0}
.o2k7Skin span.mce_undo {background-position:-160px 0}
.o2k7Skin span.mce_redo {background-position:-100px 0}
.o2k7Skin span.mce_cleanup {background-position:-40px 0}
.o2k7Skin span.mce_bullist {background-position:-20px 0}
.o2k7Skin span.mce_numlist {background-position:-80px 0}
.o2k7Skin span.mce_justifyleft {background-position:-460px 0}
.o2k7Skin span.mce_justifyright {background-position:-480px 0}
.o2k7Skin span.mce_justifycenter {background-position:-420px 0}
.o2k7Skin span.mce_justifyfull {background-position:-440px 0}
.o2k7Skin span.mce_anchor {background-position:-200px 0}
.o2k7Skin span.mce_indent {background-position:-400px 0}
.o2k7Skin span.mce_outdent {background-position:-540px 0}
.o2k7Skin span.mce_link {background-position:-500px 0}
.o2k7Skin span.mce_unlink {background-position:-640px 0}
.o2k7Skin span.mce_sub {background-position:-600px 0}
.o2k7Skin span.mce_sup {background-position:-620px 0}
.o2k7Skin span.mce_removeformat {background-position:-580px 0}
.o2k7Skin span.mce_newdocument {background-position:-520px 0}
.o2k7Skin span.mce_image {background-position:-380px 0}
.o2k7Skin span.mce_help {background-position:-340px 0}
.o2k7Skin span.mce_code {background-position:-260px 0}
.o2k7Skin span.mce_hr {background-position:-360px 0}
.o2k7Skin span.mce_visualaid {background-position:-660px 0}
.o2k7Skin span.mce_charmap {background-position:-240px 0}
.o2k7Skin span.mce_paste {background-position:-560px 0}
.o2k7Skin span.mce_copy {background-position:-700px 0}
.o2k7Skin span.mce_cut {background-position:-680px 0}
.o2k7Skin span.mce_blockquote {background-position:-220px 0}
.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}
.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}
.o2k7Skin .mce_forecolorpicker {background-position:-720px 0}
.o2k7Skin .mce_backcolorpicker {background-position:-760px 0}
/* Plugins */
.o2k7Skin span.mce_advhr {background-position:-0px -20px}
.o2k7Skin span.mce_ltr {background-position:-20px -20px}
.o2k7Skin span.mce_rtl {background-position:-40px -20px}
.o2k7Skin span.mce_emotions {background-position:-60px -20px}
.o2k7Skin span.mce_fullpage {background-position:-80px -20px}
.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}
.o2k7Skin span.mce_iespell {background-position:-120px -20px}
.o2k7Skin span.mce_insertdate {background-position:-140px -20px}
.o2k7Skin span.mce_inserttime {background-position:-160px -20px}
.o2k7Skin span.mce_absolute {background-position:-180px -20px}
.o2k7Skin span.mce_backward {background-position:-200px -20px}
.o2k7Skin span.mce_forward {background-position:-220px -20px}
.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}
.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}
.o2k7Skin span.mce_movebackward {background-position:-280px -20px}
.o2k7Skin span.mce_moveforward {background-position:-300px -20px}
.o2k7Skin span.mce_media {background-position:-320px -20px}
.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}
.o2k7Skin span.mce_pastetext {background-position:-360px -20px}
.o2k7Skin span.mce_pasteword {background-position:-380px -20px}
.o2k7Skin span.mce_selectall {background-position:-400px -20px}
.o2k7Skin span.mce_preview {background-position:-420px -20px}
.o2k7Skin span.mce_print {background-position:-440px -20px}
.o2k7Skin span.mce_cancel {background-position:-460px -20px}
.o2k7Skin span.mce_save {background-position:-480px -20px}
.o2k7Skin span.mce_replace {background-position:-500px -20px}
.o2k7Skin span.mce_search {background-position:-520px -20px}
.o2k7Skin span.mce_styleprops {background-position:-560px -20px}
.o2k7Skin span.mce_table {background-position:-580px -20px}
.o2k7Skin span.mce_cell_props {background-position:-600px -20px}
.o2k7Skin span.mce_delete_table {background-position:-620px -20px}
.o2k7Skin span.mce_delete_col {background-position:-640px -20px}
.o2k7Skin span.mce_delete_row {background-position:-660px -20px}
.o2k7Skin span.mce_col_after {background-position:-680px -20px}
.o2k7Skin span.mce_col_before {background-position:-700px -20px}
.o2k7Skin span.mce_row_after {background-position:-720px -20px}
.o2k7Skin span.mce_row_before {background-position:-740px -20px}
.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}
.o2k7Skin span.mce_table_props {background-position:-980px -20px}
.o2k7Skin span.mce_row_props {background-position:-780px -20px}
.o2k7Skin span.mce_split_cells {background-position:-800px -20px}
.o2k7Skin span.mce_template {background-position:-820px -20px}
.o2k7Skin span.mce_visualchars {background-position:-840px -20px}
.o2k7Skin span.mce_abbr {background-position:-860px -20px}
.o2k7Skin span.mce_acronym {background-position:-880px -20px}
.o2k7Skin span.mce_attribs {background-position:-900px -20px}
.o2k7Skin span.mce_cite {background-position:-920px -20px}
.o2k7Skin span.mce_del {background-position:-940px -20px}
.o2k7Skin span.mce_ins {background-position:-960px -20px}
.o2k7Skin span.mce_pagebreak {background-position:0 -40px}
.o2k7Skin .mce_spellchecker span.mceAction {background-position:-540px -20px}
program/js/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
New file
@@ -0,0 +1,8 @@
/* Black */
.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton span.mceOpen, .o2k7SkinBlack .mceListBox .mceOpen {background-image:url(img/button_bg_black.png)}
.o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}
.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}
.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}
.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}
.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}
.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#FFE7A1}
program/js/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
New file
@@ -0,0 +1,5 @@
/* Silver */
.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton span.mceOpen, .o2k7SkinSilver .mceListBox .mceOpen {background-image:url(img/button_bg_silver.png)}
.o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}
.o2k7SkinSilver .mceListBox .mceText {background:#FFF}
.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}
program/js/tiny_mce/themes/advanced/source_editor.htm
@@ -1,30 +1,30 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>{$lang_theme_code_title}</title>
    <script language="javascript" type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script language="javascript" type="text/javascript" src="jscripts/source_editor.js"></script>
    <title>{#advanced_dlg.code_title}</title>
    <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
    <script type="text/javascript" src="js/source_editor.js"></script>
    <base target="_self" />
</head>
<body onload="tinyMCEPopup.executeOnLoad('onLoadInit();');" onresize="resizeInputs();" style="display: none">
    <form name="source" onsubmit="saveContent();" action="#">
        <div style="float: left" class="title">{$lang_theme_code_title}</div>
<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
    <form name="source" onsubmit="saveContent();return false;" action="#">
        <div style="float: left" class="title">{#advanced_dlg.code_title}</div>
        <div id="wrapline" style="float: right">
            <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{$lang_theme_code_wordwrap}</label>
            <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>
        </div>
        <br style="clear: both" />
        <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px" dir="ltr" wrap="off"></textarea>
        <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>
        <div class="mceActionPanel">
            <div style="float: left">
                <input type="button" name="insert" value="{$lang_update}" onclick="saveContent();" id="insert" />
                <input type="submit" name="insert" value="{#update}" id="insert" />
            </div>
            <div style="float: right">
                <input type="button" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
                <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
            </div>
        </div>
    </form>
program/js/tiny_mce/themes/simple/editor_template.js
New file
@@ -0,0 +1 @@
(function(){var DOM=tinymce.DOM;tinymce.ThemeManager.requireLangPack('simple');tinymce.create('tinymce.themes.SimpleTheme',{init:function(ed,url){var t=this,states=['Bold','Italic','Underline','Strikethrough','InsertUnorderedList','InsertOrderedList'],s=ed.settings;t.editor=ed;ed.onInit.add(function(){ed.onNodeChange.add(function(ed,cm){tinymce.each(states,function(c){cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));});});ed.dom.loadCSS(url+"/skins/"+s.skin+"/content.css");});DOM.loadCSS((s.editor_css?ed.baseURI.toAbsolute(s.editor_css):'')||url+"/skins/"+s.skin+"/ui.css");},renderUI:function(o){var t=this,n=o.targetNode,ic,tb,ed=t.editor,cf=ed.controlManager,sc;n=DOM.insertAfter(DOM.create('span',{id:ed.id+'_container','class':'mceEditor '+ed.settings.skin+'SimpleSkin'}),n);n=sc=DOM.add(n,'table',{cellPadding:0,cellSpacing:0,'class':'mceLayout'});n=tb=DOM.add(n,'tbody');n=DOM.add(tb,'tr');n=ic=DOM.add(DOM.add(n,'td'),'div',{'class':'mceIframeContainer'});n=DOM.add(DOM.add(tb,'tr',{'class':'last'}),'td',{'class':'mceToolbar mceLast',align:'center'});tb=t.toolbar=cf.createToolbar("tools1");tb.add(cf.createButton('bold',{title:'simple.bold_desc',cmd:'Bold'}));tb.add(cf.createButton('italic',{title:'simple.italic_desc',cmd:'Italic'}));tb.add(cf.createButton('underline',{title:'simple.underline_desc',cmd:'Underline'}));tb.add(cf.createButton('strikethrough',{title:'simple.striketrough_desc',cmd:'Strikethrough'}));tb.add(cf.createSeparator());tb.add(cf.createButton('undo',{title:'simple.undo_desc',cmd:'Undo'}));tb.add(cf.createButton('redo',{title:'simple.redo_desc',cmd:'Redo'}));tb.add(cf.createSeparator());tb.add(cf.createButton('cleanup',{title:'simple.cleanup_desc',cmd:'mceCleanup'}));tb.add(cf.createSeparator());tb.add(cf.createButton('insertunorderedlist',{title:'simple.bullist_desc',cmd:'InsertUnorderedList'}));tb.add(cf.createButton('insertorderedlist',{title:'simple.numlist_desc',cmd:'InsertOrderedList'}));tb.renderTo(n);return{iframeContainer:ic,editorContainer:ed.id+'_container',sizeContainer:sc,deltaHeight:-20};},getInfo:function(){return{longname:'Simple theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add('simple',tinymce.themes.SimpleTheme);})();
program/js/tiny_mce/themes/simple/editor_template_src.js
New file
@@ -0,0 +1,85 @@
/**
 * $Id: editor_template_src.js 752 2008-03-27 21:51:25Z spocke $
 *
 * This file is meant to showcase how to create a simple theme. The advanced
 * theme is more suitable for production use.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    var DOM = tinymce.DOM;
    // Tell it to load theme specific language pack(s)
    tinymce.ThemeManager.requireLangPack('simple');
    tinymce.create('tinymce.themes.SimpleTheme', {
        init : function(ed, url) {
            var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;
            t.editor = ed;
            ed.onInit.add(function() {
                ed.onNodeChange.add(function(ed, cm) {
                    tinymce.each(states, function(c) {
                        cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));
                    });
                });
                ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css");
            });
            DOM.loadCSS((s.editor_css ? ed.baseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");
        },
        renderUI : function(o) {
            var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;
            n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);
            n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});
            n = tb = DOM.add(n, 'tbody');
            // Create iframe container
            n = DOM.add(tb, 'tr');
            n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});
            // Create toolbar container
            n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});
            // Create toolbar
            tb = t.toolbar = cf.createToolbar("tools1");
            tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));
            tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));
            tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));
            tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));
            tb.add(cf.createSeparator());
            tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));
            tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));
            tb.add(cf.createSeparator());
            tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));
            tb.add(cf.createSeparator());
            tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));
            tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));
            tb.renderTo(n);
            return {
                iframeContainer : ic,
                editorContainer : ed.id + '_container',
                sizeContainer : sc,
                deltaHeight : -20
            };
        },
        getInfo : function() {
            return {
                longname : 'Simple theme',
                author : 'Moxiecode Systems AB',
                authorurl : 'http://tinymce.moxiecode.com',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            }
        }
    });
    tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);
})();
program/js/tiny_mce/themes/simple/img/icons.gif
program/js/tiny_mce/themes/simple/langs/en.js
New file
@@ -0,0 +1,11 @@
tinyMCE.addI18n('en.simple',{
bold_desc:"Bold (Ctrl+B)",
italic_desc:"Italic (Ctrl+I)",
underline_desc:"Underline (Ctrl+U)",
striketrough_desc:"Strikethrough",
bullist_desc:"Unordered list",
numlist_desc:"Ordered list",
undo_desc:"Undo (Ctrl+Z)",
redo_desc:"Redo (Ctrl+Y)",
cleanup_desc:"Cleanup messy code"
});
program/js/tiny_mce/themes/simple/skins/default/content.css
New file
@@ -0,0 +1,25 @@
body, td, pre {
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
}
body {
    background-color: #FFFFFF;
}
.mceVisualAid {
    border: 1px dashed #BBBBBB;
}
/* MSIE specific */
* html body {
    scrollbar-3dlight-color: #F0F0EE;
    scrollbar-arrow-color: #676662;
    scrollbar-base-color: #F0F0EE;
    scrollbar-darkshadow-color: #DDDDDD;
    scrollbar-face-color: #E0E0DD;
    scrollbar-highlight-color: #F0F0EE;
    scrollbar-shadow-color: #F0F0EE;
    scrollbar-track-color: #F5F5F5;
}
program/js/tiny_mce/themes/simple/skins/default/ui.css
New file
@@ -0,0 +1,32 @@
/* Reset */
.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}
/* Containers */
.defaultSimpleSkin {position:relative}
.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}
.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}
.defaultSimpleSkin .mceToolbar {height:24px;}
/* Layout */
.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}
.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
/* Button */
.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}
.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}
.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}
/* Separator */
.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}
/* Theme */
.defaultSimpleSkin span.mce_bold {background-position:0 0}
.defaultSimpleSkin span.mce_italic {background-position:-60px 0}
.defaultSimpleSkin span.mce_underline {background-position:-140px 0}
.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}
.defaultSimpleSkin span.mce_undo {background-position:-160px 0}
.defaultSimpleSkin span.mce_redo {background-position:-100px 0}
.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}
.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
program/js/tiny_mce/themes/simple/skins/o2k7/content.css
New file
@@ -0,0 +1,17 @@
body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
body {background: #FFF;}
.mceVisualAid {border: 1px dashed #BBB;}
/* IE */
* html body {
scrollbar-3dlight-color: #F0F0EE;
scrollbar-arrow-color: #676662;
scrollbar-base-color: #F0F0EE;
scrollbar-darkshadow-color: #DDDDDD;
scrollbar-face-color: #E0E0DD;
scrollbar-highlight-color: #F0F0EE;
scrollbar-shadow-color: #F0F0EE;
scrollbar-track-color: #F5F5F5;
}
program/js/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
program/js/tiny_mce/themes/simple/skins/o2k7/ui.css
New file
@@ -0,0 +1,35 @@
/* Reset */
.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}
/* Containers */
.o2k7SimpleSkin {position:relative}
.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}
.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}
.o2k7SimpleSkin .mceToolbar {height:26px;}
/* Layout */
.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }
.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}
.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}
.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
/* Button */
.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}
.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}
.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}
.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}
.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; filter:alpha(opacity=30)}
/* Separator */
.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}
/* Theme */
.o2k7SimpleSkin span.mce_bold {background-position:0 0}
.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}
.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}
.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}
.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}
.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}
.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}
.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
program/js/tiny_mce/tiny_mce.js
@@ -1 +1 @@
function TinyMCE_Engine(){var ua;this.majorVersion="2";this.minorVersion="1.3";this.releaseDate="2007-11-27";this.instances=[];this.switchClassCache=[];this.windowArgs=[];this.loadedFiles=[];this.pendingFiles=[];this.loadingIndex=0;this.configs=[];this.currentConfig=0;this.eventHandlers=[];this.log=[];this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.settings=[];ua=navigator.userAgent;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.isMSIE5=this.isMSIE&&(ua.indexOf('MSIE 5')!=-1);this.isMSIE5_0=this.isMSIE&&(ua.indexOf('MSIE 5.0')!=-1);this.isMSIE7=this.isMSIE&&(ua.indexOf('MSIE 7')!=-1);this.isGecko=ua.indexOf('Gecko')!=-1;this.isSafari=ua.indexOf('Safari')!=-1;this.isOpera=window['opera']&&opera.buildNumber?true:false;this.isMac=ua.indexOf('Mac')!=-1;this.isNS7=ua.indexOf('Netscape/7')!=-1;this.isNS71=ua.indexOf('Netscape/7.1')!=-1;this.dialogCounter=0;this.plugins=[];this.themes=[];this.menus=[];this.loadedPlugins=[];this.buttonMap=[];this.isLoaded=false;if(this.isOpera){this.isMSIE=true;this.isGecko=false;this.isSafari=false}this.isIE=this.isMSIE;this.isRealIE=this.isMSIE&&!this.isOpera;this.idCounter=0};TinyMCE_Engine.prototype={init:function(settings){var theme,nl,baseHREF="",i,cssPath,entities,h,p,src,elements=[],head;if(this.isMSIE5_0)return;this.settings=settings;if(typeof(document.execCommand)=='undefined')return;if(!tinyMCE.baseURL){head=document.getElementsByTagName('head')[0];if(head){for(i=0,nl=head.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i])}for(i=0,nl=document.getElementsByTagName('script');i<nl.length;i++)elements.push(nl[i]);nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)baseHREF=nl[i].href}for(i=0;i<elements.length;i++){if(elements[i].src&&(elements[i].src.indexOf("tiny_mce.js")!=-1||elements[i].src.indexOf("tiny_mce_dev.js")!=-1||elements[i].src.indexOf("tiny_mce_src.js")!=-1||elements[i].src.indexOf("tiny_mce_gzip")!=-1)){src=elements[i].src;tinyMCE.srcMode=(src.indexOf('_src')!=-1||src.indexOf('_dev')!=-1)?'_src':'';tinyMCE.gzipMode=src.indexOf('_gzip')!=-1;src=src.substring(0,src.lastIndexOf('/'));if(settings.exec_mode=="src"||settings.exec_mode=="normal")tinyMCE.srcMode=settings.exec_mode=="src"?'_src':'';if(baseHREF!==''&&src.indexOf('://')==-1)tinyMCE.baseURL=baseHREF+src;else tinyMCE.baseURL=src;break}}}this.documentBasePath=document.location.href;if(this.documentBasePath.indexOf('?')!=-1)this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.indexOf('?'));this.documentURL=this.documentBasePath;this.documentBasePath=this.documentBasePath.substring(0,this.documentBasePath.lastIndexOf('/'));if(tinyMCE.baseURL.indexOf('://')==-1&&tinyMCE.baseURL.charAt(0)!='/'){tinyMCE.baseURL=this.documentBasePath+"/"+tinyMCE.baseURL}this._def("mode","none");this._def("theme","advanced");this._def("plugins","",true);this._def("language","en");this._def("docs_language",this.settings.language);this._def("elements","");this._def("textarea_trigger","mce_editable");this._def("editor_selector","");this._def("editor_deselector","mceNoEditor");this._def("valid_elements","+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],#td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang],cite[title|id|class|style|dir|lang],abbr[title|id|class|style|dir|lang],acronym[title|id|class|style|dir|lang],del[title|id|class|style|dir|lang|datetime|cite],ins[title|id|class|style|dir|lang|datetime|cite]");this._def("extended_valid_elements","");this._def("invalid_elements","");this._def("encoding","");this._def("urlconverter_callback",tinyMCE.getParam("urlconvertor_callback","TinyMCE_Engine.prototype.convertURL"));this._def("save_callback","");this._def("force_br_newlines",false);this._def("force_p_newlines",true);this._def("add_form_submit_trigger",true);this._def("relative_urls",true);this._def("remove_script_host",true);this._def("focus_alert",true);this._def("document_base_url",this.documentURL);this._def("visual",true);this._def("visual_table_class","mceVisualAid");this._def("setupcontent_callback","");this._def("fix_content_duplication",true);this._def("custom_undo_redo",true);this._def("custom_undo_redo_levels",-1);this._def("custom_undo_redo_keyboard_shortcuts",true);this._def("custom_undo_redo_restore_selection",true);this._def("custom_undo_redo_global",false);this._def("verify_html",true);this._def("apply_source_formatting",false);this._def("directionality","ltr");this._def("cleanup_on_startup",false);this._def("inline_styles",false);this._def("convert_newlines_to_brs",false);this._def("auto_reset_designmode",true);this._def("entities","39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",true);this._def("entity_encoding","named");this._def("cleanup_callback","");this._def("add_unload_trigger",true);this._def("ask",false);this._def("nowrap",false);this._def("auto_resize",false);this._def("auto_focus",false);this._def("cleanup",true);this._def("remove_linebreaks",true);this._def("button_tile_map",false);this._def("submit_patch",true);this._def("browsers","msie,safari,gecko,opera",true);this._def("dialog_type","window");this._def("accessibility_warnings",true);this._def("accessibility_focus",true);this._def("merge_styles_invalid_parents","");this._def("force_hex_style_colors",true);this._def("trim_span_elements",true);this._def("convert_fonts_to_spans",false);this._def("doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');this._def("font_size_classes",'');this._def("font_size_style_values",'xx-small,x-small,small,medium,large,x-large,xx-large',true);this._def("event_elements",'a,img',true);this._def("convert_urls",true);this._def("table_inline_editing",false);this._def("object_resizing",true);this._def("custom_shortcuts",true);this._def("convert_on_click",false);this._def("content_css",'');this._def("fix_list_elements",true);this._def("fix_table_elements",false);this._def("strict_loading_mode",document.contentType=='application/xhtml+xml');this._def("hidden_tab_class",'');this._def("display_tab_class",'');this._def("gecko_spellcheck",false);this._def("hide_selects_on_submit",true);this._def("forced_root_block",false);this._def("remove_trailing_nbsp",false);this._def("save_on_tinymce_forms",false);if(this.isMSIE&&!this.isOpera)this.settings.strict_loading_mode=false;if(this.isMSIE&&this.settings.browsers.indexOf('msie')==-1)return;if(this.isGecko&&this.settings.browsers.indexOf('gecko')==-1)return;if(this.isSafari&&this.settings.browsers.indexOf('safari')==-1)return;if(this.isOpera&&this.settings.browsers.indexOf('opera')==-1)return;baseHREF=tinyMCE.settings.document_base_url;h=document.location.href;p=h.indexOf('://');if(p>0&&document.location.protocol!="file:"){p=h.indexOf('/',p+3);h=h.substring(0,p);if(baseHREF.indexOf('://')==-1)baseHREF=h+baseHREF;tinyMCE.settings.document_base_url=baseHREF;tinyMCE.settings.document_base_prefix=h}if(baseHREF.indexOf('?')!=-1)baseHREF=baseHREF.substring(0,baseHREF.indexOf('?'));this.settings.base_href=baseHREF.substring(0,baseHREF.lastIndexOf('/'))+"/";theme=this.settings.theme;this.inlineStrict='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';this.inlineTransitional='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';this.blockElms='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';this.blockRegExp=new RegExp("^("+this.blockElms+")$","i");this.posKeyCodes=[13,45,36,35,33,34,37,38,39,40];this.uniqueURL='javascript:void(091039730);';this.uniqueTag='<div id="mceTMPElement" style="display: none">TMP</div>';this.callbacks=['onInit','getInfo','getEditorTemplate','setupContent','onChange','onPageLoad','handleNodeChange','initInstance','execCommand','getControlHTML','handleEvent','cleanup','removeInstance'];this.settings.theme_href=tinyMCE.baseURL+"/themes/"+theme;if(!tinyMCE.isIE||tinyMCE.isOpera)this.settings.force_br_newlines=false;if(tinyMCE.getParam("popups_css",false)){cssPath=tinyMCE.getParam("popups_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.popups_css=this.documentBasePath+"/"+cssPath;else this.settings.popups_css=cssPath}else this.settings.popups_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_popup.css";if(tinyMCE.getParam("editor_css",false)){cssPath=tinyMCE.getParam("editor_css","");if(cssPath.indexOf('://')==-1&&cssPath.charAt(0)!='/')this.settings.editor_css=this.documentBasePath+"/"+cssPath;else this.settings.editor_css=cssPath}else{if(this.settings.editor_css!=='')this.settings.editor_css=tinyMCE.baseURL+"/themes/"+theme+"/css/editor_ui.css"}if(this.configs.length==0){if(typeof(TinyMCECompressed)=="undefined"){tinyMCE.addEvent(window,"DOMContentLoaded",TinyMCE_Engine.prototype.onLoad);if(tinyMCE.isRealIE){if(document.body)tinyMCE.addEvent(document.body,"readystatechange",TinyMCE_Engine.prototype.onLoad);else tinyMCE.addEvent(document,"readystatechange",TinyMCE_Engine.prototype.onLoad)}tinyMCE.addEvent(window,"load",TinyMCE_Engine.prototype.onLoad);tinyMCE._addUnloadEvents()}}this.loadScript(tinyMCE.baseURL+'/themes/'+this.settings.theme+'/editor_template'+tinyMCE.srcMode+'.js');this.loadScript(tinyMCE.baseURL+'/langs/'+this.settings.language+'.js');this.loadCSS(this.settings.editor_css);p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){if(p[i].charAt(0)!='-')this.loadScript(tinyMCE.baseURL+'/plugins/'+p[i]+'/editor_plugin'+tinyMCE.srcMode+'.js')}}if(tinyMCE.getParam('entity_encoding')=='named'){settings.cleanup_entities=[];entities=tinyMCE.getParam('entities','',true,',');for(i=0;i<entities.length;i+=2)settings.cleanup_entities['c'+entities[i]]=entities[i+1]}settings.index=this.configs.length;this.configs[this.configs.length]=settings;this.loadNextScript();if(this.isIE&&!this.isOpera){try{document.execCommand('BackgroundImageCache',false,true)}catch(e){}}this.xmlEncodeRe=new RegExp('[<>&"]','g')},_addUnloadEvents:function(){var st=tinyMCE.settings.add_unload_trigger;if(tinyMCE.isIE){if(st){tinyMCE.addEvent(window,"unload",TinyMCE_Engine.prototype.unloadHandler);tinyMCE.addEvent(window.document,"beforeunload",TinyMCE_Engine.prototype.unloadHandler)}}else{if(st)tinyMCE.addEvent(window,"unload",function(){tinyMCE.triggerSave(true,true)})}},_def:function(key,def_val,t){var v=tinyMCE.getParam(key,def_val);v=t?v.replace(/\s+/g,""):v;this.settings[key]=v},hasPlugin:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},addPlugin:function(n,p){var op=this.plugins[n];p.baseURL=op?op.baseURL:tinyMCE.baseURL+"/plugins/"+n;this.plugins[n]=p;this.loadNextScript()},setPluginBaseURL:function(n,u){var op=this.plugins[n];if(op)op.baseURL=u;else this.plugins[n]={baseURL:u}},loadPlugin:function(n,u){u=u.indexOf('.js')!=-1?u.substring(0,u.lastIndexOf('/')):u;u=u.charAt(u.length-1)=='/'?u.substring(0,u.length-1):u;this.plugins[n]={baseURL:u};this.loadScript(u+"/editor_plugin"+(tinyMCE.srcMode?'_src':'')+".js")},hasTheme:function(n){return typeof(this.themes[n])!="undefined"&&this.themes[n]!=null},addTheme:function(n,t){this.themes[n]=t;this.loadNextScript()},addMenu:function(n,m){this.menus[n]=m},hasMenu:function(n){return typeof(this.plugins[n])!="undefined"&&this.plugins[n]!=null},loadScript:function(url){var i;for(i=0;i<this.loadedFiles.length;i++){if(this.loadedFiles[i]==url)return}if(tinyMCE.settings.strict_loading_mode)this.pendingFiles[this.pendingFiles.length]=url;else document.write('<sc'+'ript language="javascript" type="text/javascript" src="'+url+'"></script>');this.loadedFiles[this.loadedFiles.length]=url},loadNextScript:function(){var d=document,se;if(!tinyMCE.settings.strict_loading_mode)return;if(this.loadingIndex<this.pendingFiles.length){se=d.createElementNS('http://www.w3.org/1999/xhtml','script');se.setAttribute('language','javascript');se.setAttribute('type','text/javascript');se.setAttribute('src',this.pendingFiles[this.loadingIndex++]);d.getElementsByTagName("head")[0].appendChild(se)}else this.loadingIndex=-1;},loadCSS:function(url){var ar=url.replace(/\s+/,'').split(',');var lflen=0,csslen=0,skip=false;var x=0,i=0,nl,le;for(x=0,csslen=ar.length;x<csslen;x++){if(ar[x]!=null&&ar[x]!='null'&&ar[x].length>0){for(i=0,lflen=this.loadedFiles.length;i<lflen;i++){if(this.loadedFiles[i]==ar[x]){skip=true;break}}if(!skip){if(tinyMCE.settings.strict_loading_mode){nl=document.getElementsByTagName("head");le=document.createElement('link');le.setAttribute('href',ar[x]);le.setAttribute('rel','stylesheet');le.setAttribute('type','text/css');nl[0].appendChild(le)}else document.write('<link href="'+ar[x]+'" rel="stylesheet" type="text/css" />');this.loadedFiles[this.loadedFiles.length]=ar[x]}}}},importCSS:function(doc,css){var css_ary=css.replace(/\s+/,'').split(',');var csslen,elm,headArr,x,css_file;for(x=0,csslen=css_ary.length;x<csslen;x++){css_file=css_ary[x];if(css_file!=null&&css_file!='null'&&css_file.length>0){if(css_file.indexOf('://')==-1&&css_file.charAt(0)!='/')css_file=this.documentBasePath+"/"+css_file;if(typeof(doc.createStyleSheet)=="undefined"){elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if((headArr=doc.getElementsByTagName("head"))!=null&&headArr.length>0)headArr[0].appendChild(elm)}else doc.createStyleSheet(css_file)}}},confirmAdd:function(e,settings){var elm=tinyMCE.isIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(tinyMCE.settings.convert_on_click||(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang.lang_edit_confirm)))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true')},updateContent:function(form_element_name){var formElement,n,inst,doc;formElement=document.getElementById(form_element_name);for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();if(inst.formElement==formElement){doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isIE)doc.body.innerHTML=tinyMCE._cleanupHTML(inst,doc,this.settings,doc.body,inst.visualAid)}}},addMCEControl:function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCE_Control(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst._onAdd(replace_element,form_element_name,target_document)},removeInstance:function(ti){var t=[],n,i;for(n in tinyMCE.instances){i=tinyMCE.instances[n];if(tinyMCE.isInstance(i)&&ti!=i)t[n]=i}tinyMCE.instances=t;n=[];t=tinyMCE.undoLevels;for(i=0;i<t.length;i++){if(t[i]!=ti)n.push(t[i])}tinyMCE.undoLevels=n;tinyMCE.undoIndex=n.length;tinyMCE.dispatchCallback(ti,'remove_instance_callback','removeInstance',ti);return ti},removeMCEControl:function(editor_id){var inst=tinyMCE.getInstanceById(editor_id),h,re,ot,tn,n;if(inst){inst.switchSettings();editor_id=inst.editorId;h=tinyMCE.getContent(editor_id);this.removeInstance(inst);tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;tinyMCE.selectedElement=null;tinyMCE.selectedInstance=null;for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;tinyMCE.selectedInstance=tinyMCE.instances[n];break}re=document.getElementById(editor_id+"_parent");ot=inst.oldTargetElement;tn=ot.nodeName.toLowerCase();if(tn=="textarea"||tn=="input"){re.parentNode.removeChild(re);ot.style.display="inline";ot.value=h}else{ot.innerHTML=h;ot.style.display='block';re.parentNode.insertBefore(ot,re);re.parentNode.removeChild(re)}}},triggerSave:function(skip_cleanup,skip_callback){var inst,n;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.triggerSave(skip_cleanup,skip_callback)}},resetForm:function(form_index){var i,inst,n,formObj=document.forms[form_index];for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.switchSettings();for(i=0;i<formObj.elements.length;i++){if(inst.formTargetElementId==formObj.elements[i].name)inst.getBody().innerHTML=inst.startContent}}},execInstanceCommand:function(editor_id,command,user_interface,value,focus){var inst=tinyMCE.getInstanceById(editor_id),r;if(inst){r=inst.selection.getRng();if(typeof(focus)=="undefined")focus=true;if(focus&&(!r||!r.item))inst.contentWindow.focus();inst.autoResetDesignMode();this.selectedElement=inst.getFocusElement();inst.select();tinyMCE.execCommand(command,user_interface,value);if(tinyMCE.isIE&&window.event!=null)tinyMCE.cancelEvent(window.event)}},execCommand:function(command,user_interface,value){var inst=tinyMCE.selectedInstance,n,pe,te;user_interface=user_interface?user_interface:false;value=value?value:null;if(inst)inst.switchSettings();switch(command){case"Undo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex>0){tinyMCE.nextUndoRedoAction='Undo';inst=this.undoLevels[--this.undoIndex];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Undo')}}else inst.execCommand('Undo');return true;case"Redo":if(this.getParam('custom_undo_redo_global')){if(this.undoIndex<=this.undoLevels.length-1){tinyMCE.nextUndoRedoAction='Redo';inst=this.undoLevels[this.undoIndex++];inst.select();if(!tinyMCE.nextUndoRedoInstanceId)inst.execCommand('Redo')}}else inst.execCommand('Redo');return true;case'mceFocus':inst=tinyMCE.getInstanceById(value);if(inst)inst.getWin().focus();return;case"mceAddControl":case"mceAddEditor":tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceAddFrameControl":tinyMCE.addMCEControl(tinyMCE._getElementById(value.element,value.document),value.element,value.document);return;case"mceRemoveControl":case"mceRemoveEditor":tinyMCE.removeMCEControl(value);return;case"mceToggleEditor":inst=tinyMCE.getInstanceById(value);if(inst){pe=document.getElementById(inst.editorId+'_parent');te=inst.oldTargetElement;if(typeof(inst.enabled)=='undefined')inst.enabled=true;inst.enabled=!inst.enabled;if(!inst.enabled){pe.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')te.value=inst.getHTML();else te.innerHTML=inst.getHTML();te.style.display=inst.oldTargetDisplay;tinyMCE.dispatchCallback(inst,'hide_instance_callback','hideInstance',inst)}else{pe.style.display='block';te.style.display='none';if(te.nodeName=='TEXTAREA'||te.nodeName=='INPUT')inst.setHTML(te.value);else inst.setHTML(te.innerHTML);inst.useCSS=false;tinyMCE.dispatchCallback(inst,'show_instance_callback','showInstance',inst)}}else tinyMCE.addMCEControl(tinyMCE._getElementById(value),value);return;case"mceResetDesignMode":if(tinyMCE.isGecko){for(n in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[n]))continue;try{tinyMCE.instances[n].getDoc().designMode="off";tinyMCE.instances[n].getDoc().designMode="on";tinyMCE.instances[n].useCSS=false}catch(e){}}}return}if(inst){inst.execCommand(command,user_interface,value)}else if(tinyMCE.settings.focus_alert)alert(tinyMCELang.lang_focus_alert)},_createIFrame:function(replace_element,doc,win){var iframe,id=replace_element.getAttribute("id");var aw,ah;if(typeof(doc)=="undefined")doc=document;if(typeof(win)=="undefined")win=window;iframe=doc.createElement("iframe");aw=""+tinyMCE.settings.area_width;ah=""+tinyMCE.settings.area_height;if(aw.indexOf('%')==-1){aw=parseInt(aw);aw=(isNaN(aw)||aw<0)?300:aw;aw=aw+"px"}if(ah.indexOf('%')==-1){ah=parseInt(ah);ah=(isNaN(ah)||ah<0)?240:ah;ah=ah+"px"}iframe.setAttribute("id",id);iframe.setAttribute("name",id);iframe.setAttribute("class","mceEditorIframe");iframe.setAttribute("border","0");iframe.setAttribute("frameBorder","0");iframe.setAttribute("marginWidth","0");iframe.setAttribute("marginHeight","0");iframe.setAttribute("leftMargin","0");iframe.setAttribute("topMargin","0");iframe.setAttribute("width",aw);iframe.setAttribute("height",ah);iframe.setAttribute("allowtransparency","true");iframe.className='mceEditorIframe';if(tinyMCE.settings.auto_resize)iframe.setAttribute("scrolling","no");if(tinyMCE.isRealIE)iframe.setAttribute("src",this.settings.default_document);iframe.style.width=aw;iframe.style.height=ah;if(tinyMCE.settings.strict_loading_mode)iframe.style.marginBottom='-5px';if(tinyMCE.isRealIE)replace_element.outerHTML=iframe.outerHTML;else replace_element.parentNode.replaceChild(iframe,replace_element);if(tinyMCE.isRealIE)return win.frames[id];else return iframe},setupContent:function(editor_id){var inst=tinyMCE.instances[editor_id],i,doc=inst.getDoc(),head=doc.getElementsByTagName('head').item(0);var content=inst.startContent,contentElement,body;if(tinyMCE.settings.strict_loading_mode){content=content.replace(/&lt;/g,'<');content=content.replace(/&gt;/g,'>');content=content.replace(/&quot;/g,'"');content=content.replace(/&amp;/g,'&')}tinyMCE.selectedInstance=inst;inst.switchSettings();if(!tinyMCE.isIE&&tinyMCE.getParam("setupcontent_reload",false)&&doc.title!="blank_page"){try{doc.location.href=tinyMCE.baseURL+"/blank.htm"}catch(ex){}window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",1000);return}if(!head||!doc.body){window.setTimeout("tinyMCE.setupContent('"+editor_id+"');",10);return}tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/themes/"+inst.settings.theme+"/css/editor_content.css");tinyMCE.importCSS(inst.getDoc(),inst.settings.content_css);tinyMCE.dispatchCallback(inst,'init_instance_callback','initInstance',inst);if(tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')){inst.addShortcut('ctrl','z','lang_undo_desc','Undo');inst.addShortcut('ctrl','y','lang_redo_desc','Redo')}for(i=1;i<=6;i++)inst.addShortcut('ctrl',''+i,'','FormatBlock',false,'<h'+i+'>');inst.addShortcut('ctrl','7','','FormatBlock',false,'<p>');inst.addShortcut('ctrl','8','','FormatBlock',false,'<div>');inst.addShortcut('ctrl','9','','FormatBlock',false,'<address>');if(tinyMCE.isGecko){inst.addShortcut('ctrl','b','lang_bold_desc','Bold');inst.addShortcut('ctrl','i','lang_italic_desc','Italic');inst.addShortcut('ctrl','u','lang_underline_desc','Underline')}if(tinyMCE.getParam("convert_fonts_to_spans"))inst.getBody().setAttribute('id','mceSpanFonts');if(tinyMCE.settings.nowrap)doc.body.style.whiteSpace="nowrap";doc.body.dir=this.settings.directionality;doc.editorId=editor_id;if(!tinyMCE.isIE)doc.documentElement.editorId=editor_id;inst.setBaseHREF(tinyMCE.settings.base_href);if(tinyMCE.settings.convert_newlines_to_brs){content=tinyMCE.regexpReplace(content,"\r\n","<br />","gi");content=tinyMCE.regexpReplace(content,"\r","<br />","gi");content=tinyMCE.regexpReplace(content,"\n","<br />","gi")}content=tinyMCE.storeAwayURLs(content);content=tinyMCE._customCleanup(inst,"insert_to_editor",content);if(tinyMCE.isIE){window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["'+editor_id+'"].getDoc(), "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings.force_br_newlines)doc.styleSheets[0].addRule("p","margin: 0;");body=inst.getBody();body.editorId=editor_id}content=tinyMCE.cleanupHTMLCode(content);if(!tinyMCE.isIE){contentElement=inst.getDoc().createElement("body");doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings.cleanup_on_startup)tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,doc,this.settings,contentElement));else tinyMCE.setInnerHTML(inst.getBody(),content);tinyMCE.convertAllRelativeURLs(inst.getBody())}else{if(tinyMCE.settings.cleanup_on_startup){tinyMCE._setHTML(inst.getDoc(),content);try{tinyMCE.setInnerHTML(inst.getBody(),tinyMCE._cleanupHTML(inst,inst.contentDocument,this.settings,inst.getBody()))}catch(e){}}else tinyMCE._setHTML(inst.getDoc(),content)}tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings.visual,inst);tinyMCE.dispatchCallback(inst,'setupcontent_callback','setupContent',editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isIE)tinyMCE.addEventHandlers(inst);if(tinyMCE.isIE){tinyMCE.addEvent(inst.getBody(),"blur",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(inst.getBody(),"beforedeactivate",TinyMCE_Engine.prototype._eventPatch);if(!tinyMCE.isOpera){tinyMCE.addEvent(doc.body,"mousemove",TinyMCE_Engine.prototype.onMouseMove);tinyMCE.addEvent(doc.body,"beforepaste",TinyMCE_Engine.prototype._eventPatch);tinyMCE.addEvent(doc.body,"drop",TinyMCE_Engine.prototype._eventPatch)}}inst.select();tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE._customCleanup(inst,"insert_to_editor_dom",inst.getBody());tinyMCE._customCleanup(inst,"setup_content_dom",inst.getBody());tinyMCE._setEventsEnabled(inst.getBody(),false);tinyMCE.cleanupAnchors(inst.getDoc());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(inst.getDoc());inst.startContent=tinyMCE.trim(inst.getBody().innerHTML);inst.undoRedo.add({content:inst.startContent});if(tinyMCE.isGecko){tinyMCE.selectNodes(inst.getBody(),function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}if(tinyMCE.isGecko)inst.getBody().spellcheck=tinyMCE.getParam("gecko_spellcheck");tinyMCE._removeInternal(inst.getBody());inst.select();tinyMCE.triggerNodeChange(false,true)},storeAwayURLs:function(s){if(!s.match(/(mce_src|mce_href)/gi,s)){s=s.replace(new RegExp('src\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'src="$1" mce_src="$1"');s=s.replace(new RegExp('href\\s*=\\s*[\"\']([^ >\"]*)[\"\']','gi'),'href="$1" mce_href="$1"')}return s},_removeInternal:function(n){if(tinyMCE.isGecko){tinyMCE.selectNodes(n,function(n){if(n.nodeType==3||n.nodeType==8)n.nodeValue=n.nodeValue.replace(new RegExp('\\s(mce_src|mce_href)=\"[^\"]*\"','gi'),"");return false})}},removeTinyMCEFormElements:function(form_obj){var i,elementId;if(!tinyMCE.getParam('hide_selects_on_submit'))return;if(typeof(form_obj)=="undefined"||form_obj==null)return;if(form_obj.nodeName!="FORM"){if(form_obj.form)form_obj=form_obj.form;else form_obj=tinyMCE.getParentElement(form_obj,"form")}if(form_obj==null)return;for(i=0;i<form_obj.elements.length;i++){elementId=form_obj.elements[i].name?form_obj.elements[i].name:form_obj.elements[i].id;if(elementId.indexOf('mce_editor_')==0)form_obj.elements[i].disabled=true}},handleEvent:function(e){var inst=tinyMCE.selectedInstance,i,elm,keys;if(typeof(tinyMCE)=="undefined")return true;if(tinyMCE.executeCallback(tinyMCE.selectedInstance,'handle_event_callback','handleEvent',e))return false;switch(e.type){case"beforedeactivate":case"blur":if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.execCommand('mceEndTyping');tinyMCE.hideMenus();return;case"drop":case"beforepaste":return;case"submit":tinyMCE.formSubmit(tinyMCE.isMSIE?window.event.srcElement:e.target);return;case"reset":var formObj=tinyMCE.isIE?window.event.srcElement:e.target;for(i=0;i<document.forms.length;i++){if(document.forms[i]==formObj)window.setTimeout('tinyMCE.resetForm('+i+');',10)}return;case"keypress":if(inst&&inst.handleShortcut(e))return false;if(e.target.editorId){tinyMCE.instances[e.target.editorId].select()}else{if(e.target.ownerDocument.editorId)tinyMCE.instances[e.target.ownerDocument.editorId].select()}if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();if((tinyMCE.isGecko||tinyMCE.isOpera||tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&e.keyCode==13&&!e.shiftKey){if(TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance,e)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if((tinyMCE.isGecko&&!tinyMCE.isSafari)&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");return tinyMCE.cancelEvent(e)}}if(tinyMCE.isIE&&tinyMCE.settings.force_br_newlines&&e.keyCode==13){if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance){var sel=tinyMCE.selectedInstance.getDoc().selection;var rng=sel.createRange();if(tinyMCE.getParentElement(rng.parentElement(),"li")!=null)return false;e.returnValue=false;e.cancelBubble=true;rng.pasteHTML("<br />");rng.collapse(false);rng.select();tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange(false);return false}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false)}return false;case"keyup":case"keydown":tinyMCE.hideMenus();tinyMCE.hasMouseMoved=false;if(inst&&inst.handleShortcut(e))return false;inst._fixRootBlocks();if(inst.settings.remove_trailing_nbsp)inst._fixTrailingNbsp();if(e.target.editorId)tinyMCE.instances[e.target.editorId].select();if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();inst=tinyMCE.selectedInstance;if(tinyMCE.isGecko&&tinyMCE.settings.force_p_newlines&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance,e.type)){tinyMCE.execCommand("mceAddUndoLevel");e.preventDefault();return false}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings.visual,tinyMCE.selectedInstance);if(tinyMCE.isIE&&e.type=="keydown"&&e.keyCode==13)tinyMCE.enterKeyElement=tinyMCE.selectedInstance.getFocusElement();if(tinyMCE.isIE&&e.type=="keyup"&&e.keyCode==13){elm=tinyMCE.enterKeyElement;if(elm){var re=new RegExp('^HR|IMG|BR$','g');var dre=new RegExp('^H[1-6]$','g');if(!elm.hasChildNodes()&&!re.test(elm.nodeName)){if(dre.test(elm.nodeName))elm.innerHTML="&nbsp;&nbsp;";else elm.innerHTML="&nbsp;"}}}keys=tinyMCE.posKeyCodes;var posKey=false;for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){posKey=true;break}}if(tinyMCE.isIE&&tinyMCE.settings.custom_undo_redo){keys=[8,46];for(i=0;i<keys.length;i++){if(keys[i]==e.keyCode){if(e.type=="keyup")tinyMCE.triggerNodeChange(false)}}}if(e.keyCode==17)return true;if(tinyMCE.isGecko){if(!posKey&&e.type=="keyup"&&!e.ctrlKey||(e.ctrlKey&&(e.keyCode==86||e.keyCode==88)))tinyMCE.execCommand("mceStartTyping")}else{if(!posKey&&e.type=="keyup")tinyMCE.execCommand("mceStartTyping")}if(e.type=="keydown"&&(posKey||e.ctrlKey)&&inst)inst.undoBookmark=inst.selection.getBookmark();if(e.type=="keyup"&&(posKey||e.ctrlKey))tinyMCE.execCommand("mceEndTyping");if(posKey&&e.type=="keyup")tinyMCE.triggerNodeChange(false);if(tinyMCE.isIE&&e.ctrlKey)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);break;case"mousedown":case"mouseup":case"click":case"dblclick":case"focus":tinyMCE.hideMenus();if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.switchSettings();tinyMCE.selectedInstance.isFocused=true}var targetBody=tinyMCE.getParentElement(e.target,"html");for(var instanceName in tinyMCE.instances){if(!tinyMCE.isInstance(tinyMCE.instances[instanceName]))continue;inst=tinyMCE.instances[instanceName];inst.autoResetDesignMode();if(inst.getBody().parentNode==targetBody){inst.select();tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"a");tinyMCE.imgElement=tinyMCE.getParentElement(tinyMCE.selectedElement,"img");break}}if(!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark&&(e.type=="mouseup"||e.type=="dblclick"))tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark=tinyMCE.selectedInstance.selection.getBookmark();if(e.type!="focus")tinyMCE.selectedNode=null;tinyMCE.triggerNodeChange(false);tinyMCE.execCommand("mceEndTyping");if(e.type=="mouseup")tinyMCE.execCommand("mceAddUndoLevel");if(!tinyMCE.selectedInstance&&e.target.editorId)tinyMCE.instances[e.target.editorId].select();return false}},getButtonHTML:function(id,lang,img,cmd,ui,val){var h='',m,x,io='';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.isRealIE)io='onmouseover="tinyMCE.lastHover = this;"';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=this.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceTiledButton mceButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="background-position: '+x+'px 0" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}else{h+='<a id="{$editor_id}_'+id+'" href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" '+io+' class="mceButtonNormal" target="_self">';h+='<img src="'+img+'" alt="{$'+lang+'}" title="{$'+lang+'}" />';h+='</a>'}return h},getMenuButtonHTML:function(id,lang,img,mcmd,cmd,ui,val){var h='',m,x;mcmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+mcmd+'\');';cmd='tinyMCE.execInstanceCommand(\'{$editor_id}\',\''+cmd+'\'';if(typeof(ui)!="undefined"&&ui!=null)cmd+=','+ui;if(typeof(val)!="undefined"&&val!=null)cmd+=",'"+val+"'";cmd+=');';if(tinyMCE.getParam('button_tile_map')&&(!tinyMCE.isIE||tinyMCE.isOpera)&&(m=tinyMCE.buttonMap[id])!=null&&(tinyMCE.getParam("language")=="en"||img.indexOf('$lang')==-1)){x=0-(m*20)==0?'0':0-(m*20);if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceTiledButton mceMenuButtonNormal" target="_self">';h+='<img src="{$themeurl}/images/spacer.gif" style="width: 20px; height: 20px; background-position: '+x+'px 0" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}else{if(tinyMCE.isRealIE)h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';else h+='<span id="{$editor_id}_'+id+'" dir="ltr" class="mceMenuButton">';h+='<a href="javascript:'+cmd+'" onclick="'+cmd+'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';h+='<img src="'+img+'" title="{$'+lang+'}" /></a>';h+='<a href="javascript:'+mcmd+'" onclick="'+mcmd+'return false;" onmousedown="return false;"><img src="{$themeurl}/images/button_menu.gif" title="{$'+lang+'}" class="mceMenuButton" />';h+='</a></span>'}return h},_menuButtonEvent:function(e,o){if(o.className=='mceMenuButtonFocus')return;if(e=='over')o.className=o.className+' mceMenuHover';else o.className=o.className.replace(/\s.*$/,'')},addButtonMap:function(m){var i,a=m.replace(/\s+/,'').split(',');for(i=0;i<a.length;i++)this.buttonMap[a[i]]=i},formSubmit:function(f,p){var n,inst,found=false;if(f.form)f=f.form;if(tinyMCE.getParam('save_on_tinymce_forms')){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formElement){if(f==inst.formElement.form){found=true;inst.isNotDirty=true}}}}else found=true;if(found){tinyMCE.removeTinyMCEFormElements(f);tinyMCE.triggerSave()}if(f.mceOldSubmit&&p)f.mceOldSubmit()},submitPatch:function(){tinyMCE.formSubmit(this,true)},onLoad:function(){var r,i,c,mode,trigger,elements,element,settings,elementId,elm;var selector,deselector,elementRefAr,form;if(tinyMCE.settings.strict_loading_mode&&this.loadingIndex!=-1){window.setTimeout('tinyMCE.onLoad();',1);return}if(tinyMCE.isRealIE&&window.event.type=="readystatechange"&&document.readyState!="complete")return true;if(tinyMCE.isLoaded)return true;tinyMCE.isLoaded=true;if(tinyMCE.isRealIE&&document.body&&window.location.href!=window.top.location.href){r=document.body.createTextRange();r.collapse(true);r.select()}tinyMCE.dispatchCallback(null,'onpageload','onPageLoad');for(c=0;c<tinyMCE.configs.length;c++){tinyMCE.settings=tinyMCE.configs[c];selector=tinyMCE.getParam("editor_selector");deselector=tinyMCE.getParam("editor_deselector");elementRefAr=[];if(document.forms&&tinyMCE.settings.add_form_submit_trigger&&!tinyMCE.submitTriggers){for(i=0;i<document.forms.length;i++){form=document.forms[i];tinyMCE.addEvent(form,"submit",TinyMCE_Engine.prototype.handleEvent);tinyMCE.addEvent(form,"reset",TinyMCE_Engine.prototype.handleEvent);tinyMCE.submitTriggers=true;if(tinyMCE.settings.submit_patch){try{form.mceOldSubmit=form.submit;form.submit=TinyMCE_Engine.prototype.submitPatch}catch(e){}}}}mode=tinyMCE.settings.mode;switch(mode){case"exact":elements=tinyMCE.getParam('elements','',true,',');for(i=0;i<elements.length;i++){element=tinyMCE._getElementById(elements[i]);trigger=element?element.getAttribute(tinyMCE.settings.textarea_trigger):"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(element,"class")))continue;if(trigger=="false")continue;if((tinyMCE.settings.ask||tinyMCE.settings.convert_on_click)&&element){elementRefAr[elementRefAr.length]=element;continue}if(element)tinyMCE.addMCEControl(element,elements[i])}break;case"specific_textareas":case"textareas":elements=document.getElementsByTagName("textarea");for(i=0;i<elements.length;i++){elm=elements.item(i);trigger=elm.getAttribute(tinyMCE.settings.textarea_trigger);if(selector!==''&&!new RegExp('\\b'+selector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if(selector!=='')trigger=selector!==''?"true":"";if(new RegExp('\\b'+deselector+'\\b').test(tinyMCE.getAttrib(elm,"class")))continue;if((mode=="specific_textareas"&&trigger=="true")||(mode=="textareas"&&trigger!="false"))elementRefAr[elementRefAr.length]=elm}break}for(i=0;i<elementRefAr.length;i++){element=elementRefAr[i];elementId=element.name?element.name:element.id;if(tinyMCE.settings.ask||tinyMCE.settings.convert_on_click){if(tinyMCE.isGecko){settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});if(element.nodeName!="TEXTAREA"&&element.nodeName!="INPUT")tinyMCE.addEvent(element,"click",function(e){window.setTimeout(function(){TinyMCE_Engine.prototype.confirmAdd(e,settings)},10)});}else{settings=tinyMCE.settings;tinyMCE.addEvent(element,"focus",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});tinyMCE.addEvent(element,"click",function(){TinyMCE_Engine.prototype.confirmAdd(null,settings)});}}else tinyMCE.addMCEControl(element,elementId)}if(tinyMCE.settings.auto_focus){window.setTimeout(function(){var inst=tinyMCE.getInstanceById(tinyMCE.settings.auto_focus);inst.selection.selectNode(inst.getBody(),true,true);inst.contentWindow.focus()},100)}tinyMCE.dispatchCallback(null,'oninit','onInit')}},isInstance:function(o){return o!=null&&typeof(o)=="object"&&o.isTinyMCE_Control},getParam:function(name,default_value,strip_whitespace,split_chr){var i,outArray,value=(typeof(this.settings[name])=="undefined")?default_value:this.settings[name];if(value=="true"||value=="false")return(value=="true");if(strip_whitespace)value=tinyMCE.regexpReplace(value,"[ \t\r\n]","");if(typeof(split_chr)!="undefined"&&split_chr!=null){value=value.split(split_chr);outArray=[];for(i=0;i<value.length;i++){if(value[i]&&value[i]!=='')outArray[outArray.length]=value[i]}value=outArray}return value},getLang:function(name,default_value,parse_entities,va){var v=(typeof(tinyMCELang[name])=="undefined")?default_value:tinyMCELang[name],n;if(parse_entities)v=tinyMCE.entityDecode(v);if(va){for(n in va)v=this.replaceVar(v,n,va[n])}return v},entityDecode:function(s){var e=document.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue},addToLang:function(prefix,ar){var k;for(k in ar){if(typeof(ar[k])=='function')continue;tinyMCELang[(k.indexOf('lang_')==-1?'lang_':'')+(prefix!==''?(prefix+"_"):'')+k]=ar[k]}this.loadNextScript()},triggerNodeChange:function(focus,setup_content){var elm,inst,editorId,undoIndex=-1,undoLevels=-1,doc,anySelection,st;if(tinyMCE.selectedInstance){inst=tinyMCE.selectedInstance;elm=(typeof(setup_content)!="undefined"&&setup_content)?tinyMCE.selectedElement:inst.getFocusElement();editorId=inst.editorId;st=inst.selection.getSelectedText();if(tinyMCE.settings.auto_resize)inst.resizeToContent();if(setup_content&&tinyMCE.isGecko&&inst.isHidden())elm=inst.getBody();inst.switchSettings();anySelection=!inst.selection.isCollapsed();if(tinyMCE.settings.custom_undo_redo){undoIndex=inst.undoRedo.undoIndex;undoLevels=inst.undoRedo.undoLevels.length}tinyMCE.dispatchCallback(inst,'handle_node_change_callback','handleNodeChange',editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection,setup_content)}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus()},_customCleanup:function(inst,type,content){var pl,po,i,customCleanup;customCleanup=tinyMCE.settings.cleanup_callback;if(customCleanup!='')content=tinyMCE.resolveDots(tinyMCE.settings.cleanup_callback,window)(type,content,inst);po=tinyMCE.themes[tinyMCE.settings.theme];if(po&&po.cleanup)content=po.cleanup(type,content,inst);pl=inst.plugins;for(i=0;i<pl.length;i++){po=tinyMCE.plugins[pl[i]];if(po&&po.cleanup)content=po.cleanup(type,content,inst)}return content},setContent:function(h){if(tinyMCE.selectedInstance){tinyMCE.selectedInstance.execCommand('mceSetContent',false,h);tinyMCE.selectedInstance.repaint()}},importThemeLanguagePack:function(name){if(typeof(name)=="undefined")name=tinyMCE.settings.theme;tinyMCE.loadScript(tinyMCE.baseURL+'/themes/'+name+'/langs/'+tinyMCE.settings.language+'.js')},importPluginLanguagePack:function(name){var b=tinyMCE.baseURL+'/plugins/'+name;if(this.plugins[name])b=this.plugins[name].baseURL;tinyMCE.loadScript(b+'/langs/'+tinyMCE.settings.language+'.js')},applyTemplate:function(h,ag){return h.replace(new RegExp('\\{\\$([a-z0-9_]+)\\}','gi'),function(m,s){if(s.indexOf('lang_')==0&&tinyMCELang[s])return tinyMCELang[s];if(ag&&ag[s])return ag[s];if(tinyMCE.settings[s])return tinyMCE.settings[s];if(m=='themeurl')return tinyMCE.themeURL;return m})},replaceVar:function(h,r,v){return h.replace(new RegExp('{\\\$'+r+'}','g'),v)},openWindow:function(template,args){var html,width,height,x,y,resizable,scrollbars,url,name,win,modal,features;args=!args?{}:args;args.mce_template_file=template.file;args.mce_width=template.width;args.mce_height=template.height;tinyMCE.windowArgs=args;html=template.html;if(!(width=parseInt(template.width)))width=320;if(!(height=parseInt(template.height)))height=200;if(tinyMCE.isIE)height+=40;else height+=20;x=parseInt(screen.width/ 2.0) - (width /2.0);y=parseInt(screen.height/ 2.0) - (height /2.0);resizable=(args&&args.resizable)?args.resizable:"no";scrollbars=(args&&args.scrollbars)?args.scrollbars:"no";if(template.file.charAt(0)!='/'&&template.file.indexOf('://')==-1)url=tinyMCE.baseURL+"/themes/"+tinyMCE.getParam("theme")+"/"+template.file;else url=template.file;for(name in args){if(typeof(args[name])=='function')continue;url=tinyMCE.replaceVar(url,name,escape(args[name]))}if(html){html=tinyMCE.replaceVar(html,"css",this.settings.popups_css);html=tinyMCE.applyTemplate(html,args);win=window.open("","mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog=yes,minimizable="+resizable+",modal=yes,width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}win.document.write(html);win.document.close();win.resizeTo(width,height);win.focus()}else{if((tinyMCE.isRealIE)&&resizable!='yes'&&tinyMCE.settings.dialog_type=="modal"){height+=10;features="resizable:"+resizable+";scroll:"+scrollbars+";status:yes;center:yes;help:no;dialogWidth:"+width+"px;dialogHeight:"+height+"px;";window.showModalDialog(url,window,features)}else{modal=(resizable=="yes")?"no":"yes";if(tinyMCE.isGecko&&tinyMCE.isMac)modal="no";if(template.close_previous!="no")try{tinyMCE.lastWindow.close()}catch(ex){}win=window.open(url,"mcePopup"+new Date().getTime(),"top="+y+",left="+x+",scrollbars="+scrollbars+",dialog="+modal+",minimizable="+resizable+",modal="+modal+",width="+width+",height="+height+",resizable="+resizable);if(win==null){alert(tinyMCELang.lang_popup_blocked);return}if(template.close_previous!="no")tinyMCE.lastWindow=win;try{win.resizeTo(width,height)}catch(e){}if(tinyMCE.isGecko&&win.document){if(win.document.defaultView.statusbar.visible)win.resizeBy(0,tinyMCE.isMac?10:24)}win.focus()}}},closeWindow:function(win){win.close()},getVisualAidClass:function(class_name,state){var i,classNames,ar,className,aidClass=tinyMCE.settings.visual_table_class;if(typeof(state)=="undefined")state=tinyMCE.settings.visual;classNames=[];ar=class_name.split(' ');for(i=0;i<ar.length;i++){if(ar[i]==aidClass)ar[i]="";if(ar[i]!=='')classNames[classNames.length]=ar[i]}if(state)classNames[classNames.length]=aidClass;className="";for(i=0;i<classNames.length;i++){if(i>0)className+=" ";className+=classNames[i]}return className},handleVisualAid:function(el,deep,state,inst,skip_dispatch){var i,x,y,tableElement,anchorName,oldW,oldH,bo,cn;if(!el)return;if(!skip_dispatch)tinyMCE.dispatchCallback(inst,'handle_visual_aid_callback','handleVisualAid',el,deep,state,inst);tableElement=null;switch(el.nodeName){case"TABLE":oldW=el.style.width;oldH=el.style.height;bo=tinyMCE.getAttrib(el,"border");bo=bo==''||bo=="0"?true:false;tinyMCE.setAttrib(el,"class",tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el,"class"),state&&bo));el.style.width=oldW;el.style.height=oldH;for(y=0;y<el.rows.length;y++){for(x=0;x<el.rows[y].cells.length;x++){cn=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x],"class"),state&&bo);tinyMCE.setAttrib(el.rows[y].cells[x],"class",cn)}}break;case"A":anchorName=tinyMCE.getAttrib(el,"name");if(anchorName!==''&&state){el.title=anchorName;tinyMCE.addCSSClass(el,'mceItemAnchor')}else if(anchorName!==''&&!state)el.className='';break}if(deep&&el.hasChildNodes()){for(i=0;i<el.childNodes.length;i++)tinyMCE.handleVisualAid(el.childNodes[i],deep,state,inst,true)}},fixGeckoBaseHREFBug:function(m,e,h){var xsrc,xhref;if(tinyMCE.isGecko){if(m==1){h=h.replace(/\ssrc=/gi," mce_tsrc=");h=h.replace(/\shref=/gi," mce_thref=");return h}else{if(!new RegExp('(src|href)=','g').test(h))return h;tinyMCE.selectElements(e,'A,IMG,SELECT,AREA,IFRAME,BASE,INPUT,SCRIPT,EMBED,OBJECT,LINK',function(n){xsrc=tinyMCE.getAttrib(n,"mce_tsrc");xhref=tinyMCE.getAttrib(n,"mce_thref");if(xsrc!==''){try{n.src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xsrc)}catch(e){}n.removeAttribute("mce_tsrc")}if(xhref!==''){try{n.href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,xhref)}catch(e){}n.removeAttribute("mce_thref")}return false});tinyMCE.selectNodes(e,function(n){if(n.nodeType==3||n.nodeType==8){n.nodeValue=n.nodeValue.replace(/\smce_tsrc=/gi," src=");n.nodeValue=n.nodeValue.replace(/\smce_thref=/gi," href=")}return false})}}return h},_setHTML:function(doc,html_content){var i,html,paras,node;html_content=tinyMCE.cleanupHTMLCode(html_content);try{tinyMCE.setInnerHTML(doc.body,html_content)}catch(e){if(this.isMSIE)doc.body.createTextRange().pasteHTML(html_content)}if(tinyMCE.isIE&&tinyMCE.settings.fix_content_duplication){paras=doc.getElementsByTagName("P");for(i=0;i<paras.length;i++){node=paras[i];while((node=node.parentNode)!=null){if(node.nodeName=="P")node.outerHTML=node.innerHTML}}html=doc.body.innerHTML;tinyMCE.setInnerHTML(doc.body,html)}tinyMCE.cleanupAnchors(doc);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc)},getEditorId:function(form_element){var inst=this.getInstanceById(form_element);if(!inst)return null;return inst.editorId},getInstanceById:function(editor_id){var inst=this.instances[editor_id],n;if(!inst){for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;if(inst.formTargetElementId==editor_id)return inst}}else return inst;return null},queryInstanceCommandValue:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandValue(command);return false},queryInstanceCommandState:function(editor_id,command){var inst=tinyMCE.getInstanceById(editor_id);if(inst)return inst.queryCommandState(command);return null},setWindowArg:function(n,v){this.windowArgs[n]=v},getWindowArg:function(n,d){return(typeof(this.windowArgs[n])=="undefined")?d:this.windowArgs[n]},getCSSClasses:function(editor_id,doc){var i,c,x,rule,styles,rules,csses,selectorText,inst=tinyMCE.getInstanceById(editor_id);var cssClass,addClass,p;if(!inst)inst=tinyMCE.selectedInstance;if(!inst)return[];if(!doc)doc=inst.getDoc();if(inst&&inst.cssClasses.length>0)return inst.cssClasses;if(!doc)return;styles=doc.styleSheets;if(styles&&styles.length>0){for(x=0;x<styles.length;x++){csses=null;try{csses=tinyMCE.isIE?doc.styleSheets(x).rules:styles[x].cssRules}catch(e){}if(!csses)return[];for(i=0;i<csses.length;i++){selectorText=csses[i].selectorText;if(selectorText){rules=selectorText.split(',');for(c=0;c<rules.length;c++){rule=rules[c];while(rule.indexOf(' ')==0)rule=rule.substring(1);if(rule.indexOf(' ')!=-1||rule.indexOf(':')!=-1||rule.indexOf('mceItem')!=-1)continue;if(rule.indexOf(tinyMCE.settings.visual_table_class)!=-1||rule.indexOf('mceEditable')!=-1||rule.indexOf('mceNonEditable')!=-1)continue;if(rule.indexOf('.')!=-1){cssClass=rule.substring(rule.indexOf('.')+1);addClass=true;for(p=0;p<inst.cssClasses.length&&addClass;p++){if(inst.cssClasses[p]==cssClass)addClass=false}if(addClass)inst.cssClasses[inst.cssClasses.length]=cssClass}}}}}}return inst.cssClasses},regexpReplace:function(in_str,reg_exp,replace_str,opts){var re;if(in_str==null)return in_str;if(typeof(opts)=="undefined")opts='g';re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str)},trim:function(s){return s.replace(/^\s*|\s*$/g,"")},cleanupEventStr:function(s){s=""+s;s=s.replace('function anonymous()\n{\n','');s=s.replace('\n}','');s=s.replace(/^return true;/gi,'');return s},getControlHTML:function(c){var i,l,n,o,v,rtl=tinyMCE.getLang('lang_dir')=='rtl';l=tinyMCE.plugins;for(n in l){o=l[n];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+tinyMCE.replaceVar(v,"pluginurl",o.baseURL)+'</span>';return tinyMCE.replaceVar(v,"pluginurl",o.baseURL)}}o=tinyMCE.themes[tinyMCE.settings.theme];if(o.getControlHTML&&(v=o.getControlHTML(c))!==''){if(rtl)return'<span dir="rtl">'+v+'</span>';return v}return''},evalFunc:function(f,idx,a,o){o=!o?window:o;f=typeof(f)=='function'?f:o[f];return f.apply(o,Array.prototype.slice.call(a,idx))},dispatchCallback:function(i,p,n){return this.callFunc(i,p,n,0,this.dispatchCallback.arguments)},executeCallback:function(i,p,n){return this.callFunc(i,p,n,1,this.executeCallback.arguments)},execCommandCallback:function(i,p,n){return this.callFunc(i,p,n,2,this.execCommandCallback.arguments)},callFunc:function(ins,p,n,m,a){var l,i,on,o,s,v;s=m==2;l=tinyMCE.getParam(p,'');if(l!==''&&(v=tinyMCE.evalFunc(l,3,a))==s&&m>0)return true;if(ins!=null){for(i=0,l=ins.plugins;i<l.length;i++){o=tinyMCE.plugins[l[i]];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}}l=tinyMCE.themes;for(on in l){o=l[on];if(o[n]&&(v=tinyMCE.evalFunc(n,3,a,o))==s&&m>0)return true}return false},resolveDots:function(s,o){var i;if(typeof(s)=='string'){for(i=0,s=s.split('.');i<s.length;i++)o=o[s[i]]}else o=s;return o},xmlEncode:function(s){return s?(''+s).replace(this.xmlEncodeRe,function(c,b){switch(c){case'&':return'&amp;';case'"':return'&quot;';case'<':return'&lt;';case'>':return'&gt;'}return c}):s},add:function(c,m){var n;for(n in m){if(m.hasOwnProperty(n))c.prototype[n]=m[n]}},extend:function(p,np){var o={},n;o.parent=p;for(n in p){if(p.hasOwnProperty(n))o[n]=p[n]}for(n in np){if(np.hasOwnProperty(n))o[n]=np[n]}return o},hideMenus:function(){var e=tinyMCE.lastSelectedMenuBtn;if(tinyMCE.lastMenu){tinyMCE.lastMenu.hide();tinyMCE.lastMenu=null}if(e){tinyMCE.switchClass(e,tinyMCE.lastMenuBtnClass);tinyMCE.lastSelectedMenuBtn=null}}};var TinyMCE=TinyMCE_Engine;var tinyMCE=new TinyMCE_Engine();var tinyMCELang={};function TinyMCE_Control(settings){var t,i,tos,fu,p,x,fn,fu,pn,s=settings;this.undoRedoLevel=true;this.isTinyMCE_Control=true;this.enabled=true;this.settings=s;this.settings.theme=tinyMCE.getParam("theme","default");this.settings.width=tinyMCE.getParam("width",-1);this.settings.height=tinyMCE.getParam("height",-1);this.selection=new TinyMCE_Selection(this);this.undoRedo=new TinyMCE_UndoRedo(this);this.cleanup=new TinyMCE_Cleanup();this.shortcuts=[];this.hasMouseMoved=false;this.foreColor=this.backColor="#999999";this.data={};this.cssClasses=[];this.cleanup.init({valid_elements:s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,entities:s.entities,entity_encoding:s.entity_encoding,debug:s.cleanup_debug,indent:s.apply_source_formatting,invalid_elements:s.invalid_elements,verify_html:s.verify_html,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans});t=this.settings.theme;if(!tinyMCE.hasTheme(t)){fn=tinyMCE.callbacks;tos={};for(i=0;i<fn.length;i++){if((fu=window['TinyMCE_'+t+"_"+fn[i]]))tos[fn[i]]=fu}tinyMCE.addTheme(t,tos)}this.plugins=[];p=tinyMCE.getParam('plugins','',true,',');if(p.length>0){for(i=0;i<p.length;i++){pn=p[i];if(pn.charAt(0)=='-')pn=pn.substring(1);if(!tinyMCE.hasPlugin(pn)){fn=tinyMCE.callbacks;tos={};for(x=0;x<fn.length;x++){if((fu=window['TinyMCE_'+pn+"_"+fn[x]]))tos[fn[x]]=fu}tinyMCE.addPlugin(pn,tos)}this.plugins[this.plugins.length]=pn}}};TinyMCE_Control.prototype={selection:null,settings:null,cleanup:null,getData:function(na){var o=this.data[na];if(!o)o=this.data[na]={};return o},hasPlugin:function(n){var i;for(i=0;i<this.plugins.length;i++){if(this.plugins[i]==n)return true}return false},addPlugin:function(n,p){if(!this.hasPlugin(n)){tinyMCE.addPlugin(n,p);this.plugins[this.plugins.length]=n}},repaint:function(){var s,b,ex;if(tinyMCE.isRealIE)return;try{s=this.selection;b=s.getBookmark(true);this.getBody().style.display='none';this.getDoc().execCommand('selectall',false,null);this.getSel().collapseToStart();this.getBody().style.display='block';s.moveToBookmark(b)}catch(ex){}},switchSettings:function(){if(tinyMCE.configs.length>1&&tinyMCE.currentConfig!=this.settings.index){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings.index}},select:function(){var oldInst=tinyMCE.selectedInstance;if(oldInst!=this){if(oldInst)oldInst.execCommand('mceEndTyping');tinyMCE.dispatchCallback(this,'select_instance_callback','selectInstance',this,oldInst);tinyMCE.selectedInstance=this}},getBody:function(){return this.contentBody?this.contentBody:this.getDoc().body},getDoc:function(){return this.contentWindow.document},getWin:function(){return this.contentWindow},getContainerWin:function(){return this.containerWindow?this.containerWindow:window},getViewPort:function(){return tinyMCE.getViewPort(this.getWin())},getParentNode:function(n,f){return tinyMCE.getParentNode(n,f,this.getBody())},getParentElement:function(n,na,f){return tinyMCE.getParentElement(n,na,f,this.getBody())},getParentBlockElement:function(n){return tinyMCE.getParentBlockElement(n,this.getBody())},resizeToContent:function(){var d=this.getDoc(),b=d.body,de=d.documentElement;this.iframeElement.style.height=(tinyMCE.isRealIE)?b.scrollHeight:de.offsetHeight+'px'},addShortcut:function(m,k,d,cmd,ui,va){var n=typeof(k)=="number",ie=tinyMCE.isIE,c,sc,i,scl=this.shortcuts;if(!tinyMCE.getParam('custom_shortcuts'))return false;m=m.toLowerCase();k=ie&&!n?k.toUpperCase():k;c=n?null:k.charCodeAt(0);d=d&&d.indexOf('lang_')==0?tinyMCE.getLang(d):d;sc={alt:m.indexOf('alt')!=-1,ctrl:m.indexOf('ctrl')!=-1,shift:m.indexOf('shift')!=-1,charCode:c,keyCode:n?k:(ie?c:null),desc:d,cmd:cmd,ui:ui,val:va};for(i=0;i<scl.length;i++){if(sc.alt==scl[i].alt&&sc.ctrl==scl[i].ctrl&&sc.shift==scl[i].shift&&sc.charCode==scl[i].charCode&&sc.keyCode==scl[i].keyCode){return false}}scl[scl.length]=sc;return true},handleShortcut:function(e){var i,s,o;if(!e.altKey&&!e.ctrlKey)return false;s=this.shortcuts;for(i=0;i<s.length;i++){o=s[i];if(o.alt==e.altKey&&o.ctrl==e.ctrlKey&&(o.keyCode==e.keyCode||o.charCode==e.charCode)){if(o.cmd&&(e.type=="keydown"||(e.type=="keypress"&&!tinyMCE.isOpera)))tinyMCE.execCommand(o.cmd,o.ui,o.val);tinyMCE.cancelEvent(e);return true}}return false},autoResetDesignMode:function(){if(!tinyMCE.isIE&&this.isHidden()&&tinyMCE.getParam('auto_reset_designmode'))eval('try { this.getDoc().designMode = "On"; this.useCSS = false; } catch(e) {}')},isHidden:function(){var s;if(tinyMCE.isIE)return false;s=this.getSel();return(!s||!s.rangeCount||s.rangeCount==0)},isDirty:function(){return tinyMCE.trim(this.startContent)!=tinyMCE.trim(this.getBody().innerHTML)&&!this.isNotDirty},_mergeElements:function(scmd,pa,ch,override){var st,stc,className,n;if(scmd=="removeformat"){pa.className="";pa.style.cssText="";ch.className="";ch.style.cssText="";return}st=tinyMCE.parseStyle(tinyMCE.getAttrib(pa,"style"));stc=tinyMCE.parseStyle(tinyMCE.getAttrib(ch,"style"));className=tinyMCE.getAttrib(pa,"class");className=tinyMCE.getAttrib(ch,"class");if(override){for(n in st){if(typeof(st[n])=='function')continue;stc[n]=st[n]}}else{for(n in stc){if(typeof(stc[n])=='function')continue;st[n]=stc[n]}}tinyMCE.setAttrib(pa,"style",tinyMCE.serializeStyle(st));tinyMCE.setAttrib(pa,"class",tinyMCE.trim(className));ch.className="";ch.style.cssText="";ch.removeAttribute("class");ch.removeAttribute("style")},_fixRootBlocks:function(){var rb,b,ne,be,nx,bm;rb=tinyMCE.getParam('forced_root_block');if(!rb)return;b=this.getBody();ne=b.firstChild;while(ne){nx=ne.nextSibling;if((ne.nodeType==3&&ne.nodeValue.replace(/\s+/g,'')!='')||(ne.nodeType==1&&!tinyMCE.blockRegExp.test(ne.nodeName))){if(!bm)bm=this.selection.getBookmark();if(!be){be=this.getDoc().createElement(rb);be.appendChild(ne.cloneNode(true));b.replaceChild(be,ne)}else{be.appendChild(ne.cloneNode(true));b.removeChild(ne)}}else be=null;ne=nx}if(bm)this.selection.moveToBookmark(bm)},_fixTrailingNbsp:function(){var s=this.selection,e=s.getFocusElement(),bm,v;if(e&&tinyMCE.blockRegExp.test(e.nodeName)&&e.firstChild){v=e.firstChild.nodeValue;if(v&&v.length>1&&/(^\u00a0|\u00a0$)/.test(v)){e.firstChild.nodeValue=v.replace(/(^\u00a0|\u00a0$)/,'');s.selectNode(e.firstChild,true,false,false);}}},_setUseCSS:function(b){var d=this.getDoc();try{d.execCommand("useCSS",false,!b)}catch(ex){}try{d.execCommand("styleWithCSS",false,b)}catch(ex){}if(!tinyMCE.getParam("table_inline_editing"))try{d.execCommand('enableInlineTableEditing',false,"false")}catch(ex){}if(!tinyMCE.getParam("object_resizing"))try{d.execCommand('enableObjectResizing',false,"false")}catch(ex){}},execCommand:function(command,user_interface,value){var i,x,z,align,img,div,doc=this.getDoc(),win=this.getWin(),focusElm=this.getFocusElement();if(!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel','gi').test(command))this.undoBookmark=null;if(!tinyMCE.isIE&&!this.useCSS){this._setUseCSS(false);this.useCSS=true}this.contentDocument=doc;if(!/mceStartTyping|mceEndTyping/.test(command)){if(tinyMCE.execCommandCallback(this,'execcommand_callback','execCommand',this.editorId,this.getBody(),command,user_interface,value))return}if(focusElm&&focusElm.nodeName=="IMG"){align=focusElm.getAttribute('align');img=command=="JustifyCenter"?focusElm.cloneNode(false):focusElm;switch(command){case"JustifyLeft":if(align=='left'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','left');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyCenter":img.setAttribute('align','');img.removeAttribute('align');div=tinyMCE.getParentElement(focusElm,"div");if(div&&div.style.textAlign=="center"){if(div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div)}else{div=this.getDoc().createElement("div");div.style.textAlign='center';div.appendChild(img);focusElm.parentNode.replaceChild(div,focusElm)}this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return;case"JustifyRight":if(align=='right'){img.setAttribute('align','');img.removeAttribute('align')}else img.setAttribute('align','right');div=focusElm.parentNode;if(div&&div.nodeName=="DIV"&&div.childNodes.length==1&&div.parentNode)div.parentNode.replaceChild(img,div);this.selection.selectNode(img);this.repaint();tinyMCE.triggerNodeChange();return}}if(tinyMCE.settings.force_br_newlines){var alignValue="";if(doc.selection.type!="Control"){switch(command){case"JustifyLeft":alignValue="left";break;case"JustifyCenter":alignValue="center";break;case"JustifyFull":alignValue="justify";break;case"JustifyRight":alignValue="right";break}if(alignValue!==''){var rng=doc.selection.createRange();if((divElm=tinyMCE.getParentElement(rng.parentElement(),"div"))!=null)divElm.setAttribute("align",alignValue);else if(rng.pasteHTML&&rng.htmlText.length>0)rng.pasteHTML('<div align="'+alignValue+'">'+rng.htmlText+"</div>");tinyMCE.triggerNodeChange();return}}}switch(command){case"mceRepaint":this.repaint();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyFull":case"JustifyRight":var el=tinyMCE.getParentNode(focusElm,function(n){return tinyMCE.getAttrib(n,'align')});if(el){el.setAttribute('align','');el.removeAttribute('align')}else this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();return true;case"unlink":if(tinyMCE.isGecko&&this.getSel().isCollapsed){focusElm=tinyMCE.getParentElement(focusElm,'A');if(focusElm)this.selection.selectNode(focusElm,false)}this.getDoc().execCommand(command,user_interface,value);tinyMCE.isGecko&&this.getSel().collapseToEnd();tinyMCE.triggerNodeChange();return true;case"InsertUnorderedList":case"InsertOrderedList":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"Strikethrough":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();break;case"mceSelectNode":this.selection.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case"FormatBlock":if(value==null||value==''){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");if(elm)this.execCommand("mceRemoveNode",false,elm)}else{if(!this.cleanup.isValid(value))return true;if(tinyMCE.isGecko&&new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>','gi').test(value))value=value.replace(/[^a-z]/gi,'');if(tinyMCE.isIE&&new RegExp('blockquote|code|samp','gi').test(value)){var b=this.selection.getBookmark();this.getDoc().execCommand("FormatBlock",false,'<p>');tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()),value);this.selection.moveToBookmark(b)}else this.getDoc().execCommand("FormatBlock",false,value)}tinyMCE.triggerNodeChange();break;case"mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isIE){value.outerHTML=value.innerHTML}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML))}tinyMCE.triggerNodeChange();break;case"mceSelectNodeDepth":var parentNode=this.getFocusElement();for(i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue}if(i==value){this.selection.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return}parentNode=parentNode.parentNode}break;case"mceSetStyleInfo":case"SetStyleInfo":var rng=this.getRng();var sel=this.getSel();var scmd=value.command;var sname=value.name;var svalue=value.value==null?'':value.value;var wrapper=value.wrapper?value.wrapper:"span";var parentElm=null;var invalidRe=new RegExp("^BODY|HTML$","g");var invalidParentsRe=tinyMCE.settings.merge_styles_invalid_parents!==''?new RegExp(tinyMCE.settings.merge_styles_invalid_parents,"gi"):null;if(tinyMCE.isIE){if(rng.item)parentElm=rng.item(0);else{var pelm=rng.parentElement();var prng=doc.selection.createRange();prng.moveToElementText(pelm);if(rng.htmlText==prng.htmlText||rng.boundingWidth==0){if(invalidParentsRe==null||!invalidParentsRe.test(pelm.nodeName))parentElm=pelm}}}else{var felm=this.getFocusElement();if(sel.isCollapsed||(new RegExp('td|tr|tbody|table|img','gi').test(felm.nodeName)&&sel.anchorNode==felm.parentNode))parentElm=felm}if(parentElm&&!invalidRe.test(parentElm.nodeName)){if(scmd=="setstyle")tinyMCE.setStyleAttrib(parentElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(parentElm,sname,svalue);if(scmd=="removeformat"){parentElm.style.cssText='';tinyMCE.setAttrib(parentElm,'class','')}var ch=tinyMCE.getNodeTree(parentElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==parentElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}else{this._setUseCSS(false);doc.execCommand("FontName",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(x=0;x<elementArray.length;x++){elm=elementArray[x];if(elm){var spanElm=doc.createElement(wrapper);if(scmd=="setstyle")tinyMCE.setStyleAttrib(spanElm,sname,svalue);if(scmd=="setattrib")tinyMCE.setAttrib(spanElm,sname,svalue);if(scmd=="removeformat"){spanElm.style.cssText='';tinyMCE.setAttrib(spanElm,'class','')}if(elm.hasChildNodes()){for(i=0;i<elm.childNodes.length;i++)spanElm.appendChild(elm.childNodes[i].cloneNode(true))}spanElm.setAttribute("mce_new","true");elm.parentNode.replaceChild(spanElm,elm);var ch=tinyMCE.getNodeTree(spanElm,[],1);for(z=0;z<ch.length;z++){if(ch[z]==spanElm)continue;if(scmd=="setstyle")tinyMCE.setStyleAttrib(ch[z],sname,'');if(scmd=="setattrib")tinyMCE.setAttrib(ch[z],sname,'');if(scmd=="removeformat"){ch[z].style.cssText='';tinyMCE.setAttrib(ch[z],'class','')}}}}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i];var isNew=tinyMCE.getAttrib(elm,"mce_new")=="true";elm.removeAttribute("mce_new");if(elm.childNodes&&elm.childNodes.length==1&&elm.childNodes[0].nodeType==1){this._mergeElements(scmd,elm,elm.childNodes[0],isNew);continue}if(elm.parentNode.childNodes.length==1&&!invalidRe.test(elm.nodeName)&&!invalidRe.test(elm.parentNode.nodeName)){if(invalidParentsRe==null||!invalidParentsRe.test(elm.parentNode.nodeName))this._mergeElements(scmd,elm.parentNode,elm,false)}}var nodes=doc.getElementsByTagName(wrapper);for(i=nodes.length-1;i>=0;i--){var elm=nodes[i],isEmpty=true;var tmp=doc.createElement("body");tmp.appendChild(elm.cloneNode(false));tmp.innerHTML=tmp.innerHTML.replace(new RegExp('style=""|class=""','gi'),'');if(new RegExp('<span>','gi').test(tmp.innerHTML)){for(x=0;x<elm.childNodes.length;x++){if(elm.parentNode!=null)elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true),elm)}elm.parentNode.removeChild(elm)}}if(scmd=="removeformat")tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"FontName":if(value==null){var s=this.getSel();if(tinyMCE.isGecko&&s.isCollapsed){var f=tinyMCE.getParentElement(this.getFocusElement(),"font");if(f!=null)this.selection.selectNode(f,false)}this.getDoc().execCommand("RemoveFormat",false,null);if(f!=null&&tinyMCE.isGecko){var r=this.getRng().cloneRange();r.collapse(true);s.removeAllRanges();s.addRange(r)}}else this.getDoc().execCommand('FontName',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"FontSize":this.getDoc().execCommand('FontSize',false,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);return;case"forecolor":value=value==null?this.foreColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.foreColor=value;this.getDoc().execCommand('forecolor',false,value);break;case"HiliteColor":value=value==null?this.backColor:value;value=tinyMCE.trim(value);value=value.charAt(0)!='#'?(isNaN('0x'+value)?value:'#'+value):value;this.backColor=value;if(tinyMCE.isGecko||tinyMCE.isOpera){this._setUseCSS(true);this.getDoc().execCommand('hilitecolor',false,value);this._setUseCSS(false)}else this.getDoc().execCommand('BackColor',false,value);break;case"Cut":case"Copy":case"Paste":var cmdFailed=false;eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');if(tinyMCE.isOpera&&cmdFailed)alert('Currently not supported by your browser, use keyboard shortcuts instead.');if(tinyMCE.isGecko&&cmdFailed){if(confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');return}else tinyMCE.triggerNodeChange();break;case"mceSetContent":if(!value)value="";value=tinyMCE.storeAwayURLs(value);value=tinyMCE._customCleanup(this,"insert_to_editor",value);if(this.getBody().nodeName=='BODY')tinyMCE._setHTML(doc,value);else this.getBody().innerHTML=value;tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,doc,this.settings,this.getBody(),false,false,false,true));tinyMCE.convertAllRelativeURLs(this.getBody());tinyMCE._removeInternal(this.getBody());if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();return true;case"mceCleanup":var b=this.selection.getBookmark();tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);tinyMCE.setInnerHTML(this.getBody(),tinyMCE._cleanupHTML(this,this.contentDocument,this.settings,this.getBody(),this.visualAid));tinyMCE.convertAllRelativeURLs(doc.body);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(doc);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE._setEventsEnabled(this.getBody(),false);this._addBogusBR();this.repaint();this.selection.moveToBookmark(b);tinyMCE.triggerNodeChange();break;case"mceReplaceContent":if(!value)value='';this.getWin().focus();var selectedText="";if(tinyMCE.isIE){var rng=doc.selection.createRange();selectedText=rng.text}else selectedText=this.getSel().toString();if(selectedText.length>0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value)}this._addBogusBR();tinyMCE.triggerNodeChange();break;case"mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value.targets)=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value.targets;var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value.name,value.value);tinyMCE.triggerNodeChange()}}break;case"mceSetCSSClass":this.execCommand("mceSetStyleInfo",false,{command:"setattrib",name:"class",value:value});break;case"mceInsertRawHTML":var key='tiny_mce_marker';this.execCommand('mceBeginUndoLevel');this.execCommand('mceInsertContent',false,key);var scrollX=this.getBody().scrollLeft+this.getDoc().documentElement.scrollLeft;var scrollY=this.getBody().scrollTop+this.getDoc().documentElement.scrollTop;var html=this.getBody().innerHTML;if((pos=html.indexOf(key))!=-1)tinyMCE.setInnerHTML(this.getBody(),html.substring(0,pos)+value+html.substring(pos+key.length));this.contentWindow.scrollTo(scrollX,scrollY);this.execCommand('mceEndUndoLevel');break;case"mceInsertContent":if(!value)value='';var insertHTMLFailed=false;if(tinyMCE.isGecko||tinyMCE.isOpera){try{if(value.indexOf('<')==-1&&!value.match(/(&#38;|&#160;|&#60;|&#62;)/g)){var r=this.getRng();var n=this.getDoc().createTextNode(tinyMCE.entityDecode(value));var s=this.getSel();var r2=r.cloneRange();s.removeAllRanges();r.deleteContents();r.insertNode(n);r2.selectNode(n);r2.collapse(false);s.removeAllRanges();s.addRange(r2)}else{value=tinyMCE.fixGeckoBaseHREFBug(1,this.getDoc(),value);this.getDoc().execCommand('inserthtml',false,value);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}}catch(ex){insertHTMLFailed=true}if(!insertHTMLFailed){tinyMCE.triggerNodeChange();return}}if(!tinyMCE.isIE){var isHTML=value.indexOf('<')!=-1;var sel=this.getSel();var rng=this.getRng();if(isHTML){if(tinyMCE.isSafari){var tmpRng=this.getDoc().createRange();tmpRng.setStart(this.getBody(),0);tmpRng.setEnd(this.getBody(),0);value=tmpRng.createContextualFragment(value)}else value=rng.createContextualFragment(value)}else{value=doc.createTextNode(tinyMCE.entityDecode(value))}if(tinyMCE.isSafari&&!isHTML){this.execCommand('InsertText',false,value.nodeValue);tinyMCE.triggerNodeChange();return true}else if(tinyMCE.isSafari&&isHTML){rng.deleteContents();rng.insertNode(value);tinyMCE.triggerNodeChange();return true}rng.deleteContents();if(rng.startContainer.nodeType==3){var node=rng.startContainer.splitText(rng.startOffset);node.parentNode.insertBefore(value,node)}else rng.insertNode(value);if(!isHTML){sel.selectAllChildren(doc.body);sel.removeAllRanges();var rng=doc.createRange();rng.selectNode(value);rng.collapse(false);sel.addRange(rng)}else rng.collapse(false);tinyMCE.fixGeckoBaseHREFBug(2,this.getDoc(),value)}else{var rng=doc.selection.createRange(),tmpRng=null;var c=value.indexOf('<!--')!=-1;if(c)value=tinyMCE.uniqueTag+value;if(rng.item)rng.item(0).outerHTML=value;else rng.pasteHTML(value);if(c){var e=this.getDoc().getElementById('mceTMPElement');e.parentNode.removeChild(e)}}tinyMCE.execCommand("mceAddUndoLevel");tinyMCE.triggerNodeChange();break;case"mceStartTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex==-1){this.undoRedo.typingUndoIndex=this.undoRedo.undoIndex;tinyMCE.typingUndoIndex=tinyMCE.undoIndex;this.execCommand('mceAddUndoLevel')}break;case"mceEndTyping":if(tinyMCE.settings.custom_undo_redo&&this.undoRedo.typingUndoIndex!=-1){this.execCommand('mceAddUndoLevel');this.undoRedo.typingUndoIndex=-1}tinyMCE.typingUndoIndex=-1;break;case"mceBeginUndoLevel":this.undoRedoLevel=false;break;case"mceEndUndoLevel":this.undoRedoLevel=true;this.execCommand('mceAddUndoLevel');break;case"mceAddUndoLevel":if(tinyMCE.settings.custom_undo_redo&&this.undoRedoLevel){if(this.undoRedo.add())tinyMCE.triggerNodeChange(false)}break;case"Undo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.undo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"Redo":if(tinyMCE.settings.custom_undo_redo){tinyMCE.execCommand("mceEndTyping");this.undoRedo.redo();tinyMCE.triggerNodeChange()}else this.getDoc().execCommand(command,user_interface,value);break;case"mceToggleVisualAid":this.visualAid=!this.visualAid;tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid,this);tinyMCE.triggerNodeChange();break;case"Indent":this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();if(tinyMCE.isIE){var n=tinyMCE.getParentElement(this.getFocusElement(),"blockquote");do{if(n&&n.nodeName=="BLOCKQUOTE"){n.removeAttribute("dir");n.removeAttribute("style")}}while(n!=null&&(n=n.parentNode)!=null)}break;case"RemoveFormat":case"removeformat":var text=this.selection.getSelectedText();if(tinyMCE.isOpera){this.getDoc().execCommand("RemoveFormat",false,null);return}if(tinyMCE.isIE){try{var rng=doc.selection.createRange();rng.execCommand("RemoveFormat",false,null)}catch(e){}this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}else{this.getDoc().execCommand(command,user_interface,value);this.execCommand("mceSetStyleInfo",false,{command:"removeformat"})}if(text.length==0)this.execCommand("mceSetCSSClass",false,"");tinyMCE.triggerNodeChange();break;default:this.getDoc().execCommand(command,user_interface,value);if(tinyMCE.isGecko)window.setTimeout('tinyMCE.triggerNodeChange(false);',1);else tinyMCE.triggerNodeChange()}if(command!="mceAddUndoLevel"&&command!="Undo"&&command!="Redo"&&command!="mceStartTyping"&&command!="mceEndTyping")tinyMCE.execCommand("mceAddUndoLevel")},queryCommandValue:function(c){try{return this.getDoc().queryCommandValue(c)}catch(e){return null}},queryCommandState:function(c){return this.getDoc().queryCommandState(c)},_addBogusBR:function(){var b=this.getBody();if(tinyMCE.isGecko&&!b.hasChildNodes())b.innerHTML='<br _moz_editor_bogus_node="TRUE" />'},_onAdd:function(replace_element,form_element_name,target_document){var hc,th,tos,editorTemplate,targetDoc,deltaWidth,deltaHeight,html,rng,fragment;var dynamicIFrame,tElm,doc,parentElm;th=this.settings.theme;tos=tinyMCE.themes[th];targetDoc=target_document?target_document:document;this.targetDoc=targetDoc;tinyMCE.themeURL=tinyMCE.baseURL+"/themes/"+this.settings.theme;this.settings.themeurl=tinyMCE.themeURL;if(!replace_element){alert("Error: Could not find the target element.");return false}if(tos.getEditorTemplate)editorTemplate=tos.getEditorTemplate(this.settings,this.editorId);deltaWidth=editorTemplate.delta_width?editorTemplate.delta_width:0;deltaHeight=editorTemplate.delta_height?editorTemplate.delta_height:0;html='<span id="'+this.editorId+'_parent" class="mceEditorContainer">'+editorTemplate.html;html=tinyMCE.replaceVar(html,"editor_id",this.editorId);if(!this.settings.default_document)this.settings.default_document=tinyMCE.baseURL+"/blank.htm";this.settings.old_width=this.settings.width;this.settings.old_height=this.settings.height;if(this.settings.width==-1)this.settings.width=replace_element.offsetWidth;if(this.settings.height==-1)this.settings.height=replace_element.offsetHeight;if(this.settings.width==0)this.settings.width=replace_element.style.width;if(this.settings.height==0)this.settings.height=replace_element.style.height;if(this.settings.width==0)this.settings.width=320;if(this.settings.height==0)this.settings.height=240;this.settings.area_width=parseInt(this.settings.width);this.settings.area_height=parseInt(this.settings.height);this.settings.area_width+=deltaWidth;this.settings.area_height+=deltaHeight;this.settings.width_style=""+this.settings.width;this.settings.height_style=""+this.settings.height;if((""+this.settings.width).indexOf('%')!=-1)this.settings.area_width="100%";else this.settings.width_style+='px';if((""+this.settings.height).indexOf('%')!=-1)this.settings.area_height="100%";else this.settings.height_style+='px';if((""+replace_element.style.width).indexOf('%')!=-1){this.settings.width=replace_element.style.width;this.settings.area_width="100%";this.settings.width_style="100%"}if((""+replace_element.style.height).indexOf('%')!=-1){this.settings.height=replace_element.style.height;this.settings.area_height="100%";this.settings.height_style="100%"}html=tinyMCE.applyTemplate(html);this.settings.width=this.settings.old_width;this.settings.height=this.settings.old_height;this.visualAid=this.settings.visual;this.formTargetElementId=form_element_name;if(replace_element.nodeName=="TEXTAREA"||replace_element.nodeName=="INPUT")this.startContent=replace_element.value;else this.startContent=replace_element.innerHTML;if(replace_element.nodeName!="TEXTAREA"&&replace_element.nodeName!="INPUT"){this.oldTargetElement=replace_element;hc='<input type="hidden" id="'+form_element_name+'" name="'+form_element_name+'" />';this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";html+='</span>';if(tinyMCE.isGecko)html=hc+html;else html+=hc;if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}else{html+='</span>';this.oldTargetElement=replace_element;this.oldTargetDisplay=tinyMCE.getStyle(this.oldTargetElement,'display','inline');this.oldTargetElement.style.display="none";if(tinyMCE.isGecko){rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);fragment=rng.createContextualFragment(html);tinyMCE.insertAfter(fragment,replace_element)}else replace_element.insertAdjacentHTML("beforeBegin",html)}dynamicIFrame=false;tElm=targetDoc.getElementById(this.editorId);if(!tinyMCE.isIE){if(tElm&&(tElm.nodeName=="SPAN"||tElm.nodeName=="span")){tElm=tinyMCE._createIFrame(tElm,targetDoc);dynamicIFrame=true}this.targetElement=tElm;this.iframeElement=tElm;this.contentDocument=tElm.contentDocument;this.contentWindow=tElm.contentWindow;}else{if(tElm&&tElm.nodeName=="SPAN")tElm=tinyMCE._createIFrame(tElm,targetDoc,targetDoc.parentWindow);else tElm=targetDoc.frames[this.editorId];this.targetElement=tElm;this.iframeElement=targetDoc.getElementById(this.editorId);if(tinyMCE.isOpera){this.contentDocument=this.iframeElement.contentDocument;this.contentWindow=this.iframeElement.contentWindow;dynamicIFrame=true}else{this.contentDocument=tElm.window.document;this.contentWindow=tElm.window}this.getDoc().designMode="on"}doc=this.contentDocument;if(dynamicIFrame){html=tinyMCE.getParam('doctype')+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+tinyMCE.settings.base_href+'" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';try{if(!this.isHidden())this.getDoc().designMode="on";doc.open();doc.write(html);doc.close()}catch(e){this.getDoc().location.href=tinyMCE.baseURL+"/blank.htm"}}if(tinyMCE.isIE)window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\""+this.editorId+"\"]);",1);parentElm=this.targetDoc.getElementById(this.editorId+'_parent');this.formElement=tinyMCE.isGecko?parentElm.previousSibling:parentElm.nextSibling;tinyMCE.setupContent(this.editorId,true);return true},setBaseHREF:function(u){var h,b,d,nl;d=this.getDoc();nl=d.getElementsByTagName("base");b=nl.length>0?nl[0]:null;if(!b){nl=d.getElementsByTagName("head");h=nl.length>0?nl[0]:null;b=d.createElement("base");b.setAttribute('href',u);h.appendChild(b)}else{if(u==''||u==null)b.parentNode.removeChild(b);else b.setAttribute('href',u)}},getHTML:function(r){var h,d=this.getDoc(),b=this.getBody();if(r)return b.innerHTML;h=tinyMCE._cleanupHTML(this,d,this.settings,b,false,true,false,true);if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertSpansToFonts(d);return h},setHTML:function(h){this.execCommand('mceSetContent',false,h);this.repaint()},getFocusElement:function(){return this.selection.getFocusElement()},getSel:function(){return this.selection.getSel()},getRng:function(){return this.selection.getRng()},triggerSave:function(skip_cleanup,skip_callback){var e,nl=[],i,s,content,htm;if(!this.enabled)return;this.switchSettings();s=tinyMCE.settings;if(tinyMCE.isRealIE){e=this.iframeElement;do{if(e.style&&e.style.display=='none'){e.style.display='block';nl[nl.length]={elm:e,type:'style'}}if(e.style&&s.hidden_tab_class.length>0&&e.className.indexOf(s.hidden_tab_class)!=-1){e.className=s.display_tab_class;nl[nl.length]={elm:e,type:'class'}}}while((e=e.parentNode)!=null)}tinyMCE.settings.preformatted=false;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;tinyMCE._setHTML(this.getDoc(),this.getBody().innerHTML);if(this.settings.cleanup==false){tinyMCE.handleVisualAid(this.getBody(),true,false,this);tinyMCE._setEventsEnabled(this.getBody(),true)}tinyMCE._customCleanup(this,"submit_content_dom",this.contentWindow.document.body);htm=skip_cleanup?this.getBody().innerHTML:tinyMCE._cleanupHTML(this,this.getDoc(),this.settings,this.getBody(),tinyMCE.visualAid,true,true);htm=tinyMCE._customCleanup(this,"submit_content",htm);if(!skip_callback&&tinyMCE.settings.save_callback!=='')content=tinyMCE.resolveDots(tinyMCE.settings.save_callback,window)(this.formTargetElementId,htm,this.getBody());if((typeof(content)!="undefined")&&content!=null)htm=content;htm=tinyMCE.regexpReplace(htm,"&#40;","(","gi");htm=tinyMCE.regexpReplace(htm,"&#41;",")","gi");htm=tinyMCE.regexpReplace(htm,"&#59;",";","gi");htm=tinyMCE.regexpReplace(htm,"&#34;","&quot;","gi");htm=tinyMCE.regexpReplace(htm,"&#94;","^","gi");if(this.formElement)this.formElement.value=htm;if(tinyMCE.isSafari&&this.formElement)this.formElement.innerText=htm;for(i=0;i<nl.length;i++){if(nl[i].type=='style')nl[i].elm.style.display='none';else nl[i].elm.className=s.hidden_tab_class}}};tinyMCE.add(TinyMCE_Engine,{cleanupHTMLCode:function(s){s=s.replace(new RegExp('<p \\/>','gi'),'<p>&nbsp;</p>');s=s.replace(new RegExp('<p>\\s*<\\/p>','gi'),'<p>&nbsp;</p>');s=s.replace(new RegExp('<br>\\s*<\\/br>','gi'),'<br />');s=s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>','gi'),'<$1$2$3></$1$2>');s=s.replace(new RegExp('\\s+></','gi'),'></');s=s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>','gi'),'<$1$2 />');if(tinyMCE.isIE)s=s.replace(new RegExp('<p><hr \\/><\\/p>','gi'),"<hr>");if(tinyMCE.isIE)s=s.replace(/<!(\s*)\/>/g,'');return s},parseStyle:function(str){var ar=[],st,i,re,pa;if(str==null)return ar;st=str.split(';');tinyMCE.clearArray(ar);for(i=0;i<st.length;i++){if(st[i]=='')continue;re=new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');pa=st[i].replace(re,'$1||$2').split('||');if(pa.length==2)ar[pa[0].toLowerCase()]=pa[1]}return ar},compressStyle:function(ar,pr,sf,res){var box=[],i,a;box[0]=ar[pr+'-top'+sf];box[1]=ar[pr+'-left'+sf];box[2]=ar[pr+'-right'+sf];box[3]=ar[pr+'-bottom'+sf];for(i=0;i<box.length;i++){if(box[i]==null)return;if(i&&box[i]!=box[i-1])return}ar[res]=box[0];ar[pr+'-top'+sf]=null;ar[pr+'-left'+sf]=null;ar[pr+'-right'+sf]=null;ar[pr+'-bottom'+sf]=null},serializeStyle:function(ar){var str="",key,val,m;tinyMCE.compressStyle(ar,"border","","border");tinyMCE.compressStyle(ar,"border","-width","border-width");tinyMCE.compressStyle(ar,"border","-color","border-color");tinyMCE.compressStyle(ar,"border","-style","border-style");tinyMCE.compressStyle(ar,"padding","","padding");tinyMCE.compressStyle(ar,"margin","","margin");for(key in ar){val=ar[key];if(typeof(val)=='function')continue;if(key.indexOf('mso-')==0)continue;if(val!=null&&val!==''){val=''+val;val=val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)",'gi'),"url('$1')");if(val.indexOf('url(')!=-1&&tinyMCE.getParam('convert_urls')){m=new RegExp("url\\('(.*?)'\\)").exec(val);if(m.length>1)val="url('"+eval(tinyMCE.getParam('urlconverter_callback')+"(m[1], null, true);")+"')"}if(tinyMCE.getParam("force_hex_style_colors"))val=tinyMCE.convertRGBToHex(val,true);val=val.replace(/\"/g,'\'');if(val!="url('')")str+=key.toLowerCase()+": "+val+"; "}}if(new RegExp('; $').test(str))str=str.substring(0,str.length-2);return str},convertRGBToHex:function(s,k){var re,rgb;if(s.toLowerCase().indexOf('rgb')!=-1){re=new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)","gi");rgb=s.replace(re,"$1,$2,$3,$4,$5").split(',');if(rgb.length==5){r=parseInt(rgb[1]).toString(16);g=parseInt(rgb[2]).toString(16);b=parseInt(rgb[3]).toString(16);r=r.length==1?'0'+r:r;g=g.length==1?'0'+g:g;b=b.length==1?'0'+b:b;s="#"+r+g+b;if(k)s=rgb[0]+s+rgb[4]}}return s},convertHexToRGB:function(s){if(s.indexOf('#')!=-1){s=s.replace(new RegExp('[^0-9A-F]','gi'),'');return"rgb("+parseInt(s.substring(0,2),16)+","+parseInt(s.substring(2,4),16)+","+parseInt(s.substring(4,6),16)+")"}return s},convertSpansToFonts:function(doc){var s,i,size,fSize,x,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){size=tinyMCE.trim(s[i].style.fontSize).toLowerCase();fSize=0;for(x=0;x<sizes.length;x++){if(sizes[x]==size){fSize=x+1;break}}if(fSize>0){tinyMCE.setAttrib(s[i],'size',fSize);s[i].style.fontSize=''}fFace=s[i].style.fontFamily;if(fFace!=null&&fFace!==''){tinyMCE.setAttrib(s[i],'face',fFace);s[i].style.fontFamily=''}fColor=s[i].style.color;if(fColor!=null&&fColor!==''){tinyMCE.setAttrib(s[i],'color',tinyMCE.convertRGBToHex(fColor));s[i].style.color=''}}},convertFontsToSpans:function(doc){var fsClasses,s,i,fSize,fFace,fColor,sizes=tinyMCE.getParam('font_size_style_values').replace(/\s+/,'').split(',');fsClasses=tinyMCE.getParam('font_size_classes');if(fsClasses!=='')fsClasses=fsClasses.replace(/\s+/,'').split(',');else fsClasses=null;s=tinyMCE.selectElements(doc,'span,font');for(i=0;i<s.length;i++){fSize=tinyMCE.getAttrib(s[i],'size');fFace=tinyMCE.getAttrib(s[i],'face');fColor=tinyMCE.getAttrib(s[i],'color');if(fSize!==''){fSize=parseInt(fSize);if(fSize>0&&fSize<8){if(fsClasses!=null)tinyMCE.setAttrib(s[i],'class',fsClasses[fSize-1]);else s[i].style.fontSize=sizes[fSize-1]}s[i].removeAttribute('size')}if(fFace!==''){s[i].style.fontFamily=fFace;s[i].removeAttribute('face')}if(fColor!==''){s[i].style.color=fColor;s[i].removeAttribute('color')}}},cleanupAnchors:function(doc){var i,cn,x,an=doc.getElementsByTagName("a");for(i=an.length-1;i>=0;i--){if(tinyMCE.getAttrib(an[i],"name")!==''&&tinyMCE.getAttrib(an[i],"href")==''){cn=an[i].childNodes;for(x=cn.length-1;x>=0;x--)tinyMCE.insertAfter(cn[x],an[i])}}},getContent:function(editor_id){if(typeof(editor_id)!="undefined")tinyMCE.getInstanceById(editor_id).select();if(tinyMCE.selectedInstance)return tinyMCE.selectedInstance.getHTML();return null},_fixListElements:function(d){var nl,x,a=['ol','ul'],i,n,p,r=new RegExp('^(OL|UL)$'),np;for(x=0;x<a.length;x++){nl=d.getElementsByTagName(a[x]);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=tinyMCE.prevNode(n,'LI');if(!np){np=d.createElement('li');np.innerHTML='&nbsp;';np.appendChild(n);p.insertBefore(np,p.firstChild)}else np.appendChild(n)}}}},_fixTables:function(d){var nl,i,n,p,np,x,t;nl=d.getElementsByTagName('table');for(i=0;i<nl.length;i++){n=nl[i];if((p=tinyMCE.getParentElement(n,'p,h1,h2,h3,h4,h5,h6'))!=null){np=p.cloneNode(false);np.removeAttribute('id');t=n;while((n=n.nextSibling))np.appendChild(n);tinyMCE.insertAfter(np,p);tinyMCE.insertAfter(t,p)}}},_cleanupHTML:function(inst,doc,config,elm,visual,on_save,on_submit,inn){var h,d,t1,t2,t3,t4,t5,c,s,nb;if(!tinyMCE.getParam('cleanup'))return elm.innerHTML;on_save=typeof(on_save)=='undefined'?false:on_save;c=inst.cleanup;s=inst.settings;d=c.settings.debug;if(d)t1=new Date().getTime();inst._fixRootBlocks();if(tinyMCE.getParam("convert_fonts_to_spans"))tinyMCE.convertFontsToSpans(doc);if(tinyMCE.getParam("fix_list_elements"))tinyMCE._fixListElements(doc);if(tinyMCE.getParam("fix_table_elements"))tinyMCE._fixTables(doc);tinyMCE._customCleanup(inst,on_save?"get_from_editor_dom":"insert_to_editor_dom",doc.body);if(d)t2=new Date().getTime();c.settings.on_save=on_save;c.idCount=0;c.serializationId++;c.serializedNodes=[];c.sourceIndex=-1;if(s.cleanup_serializer=="xml")h=c.serializeNodeAsXML(elm,inn);else h=c.serializeNodeAsHTML(elm,inn);if(d)t3=new Date().getTime();nb=tinyMCE.getParam('entity_encoding')=='numeric'?'&#160;':'&nbsp;';h=h.replace(/<\/?(body|head|html)[^>]*>/gi,'');h=h.replace(new RegExp(' (rowspan="1"|colspan="1")','g'),'');h=h.replace(/<p><hr \/><\/p>/g,'<hr />');h=h.replace(/<p>(&nbsp;|&#160;)<\/p><hr \/><p>(&nbsp;|&#160;)<\/p>/g,'<hr />');h=h.replace(/<td>\s*<br \/>\s*<\/td>/g,'<td>'+nb+'</td>');h=h.replace(/<p>\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<br \/>$/,'');h=h.replace(/<br \/><\/p>/g,'</p>');h=h.replace(/<p>\s*(&nbsp;|&#160;)\s*<br \/>\s*(&nbsp;|&#160;)\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*(&nbsp;|&#160;)\s*<br \/>\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(/<p>\s*<br \/>\s*&nbsp;\s*<\/p>/g,'<p>'+nb+'</p>');h=h.replace(new RegExp('<a>(.*?)<\\/a>','g'),'$1');h=h.replace(/<p([^>]*)>\s*<\/p>/g,'<p$1>'+nb+'</p>');if(/^\s*(<br \/>|<p>&nbsp;<\/p>|<p>&#160;<\/p>|<p><\/p>)\s*$/.test(h))h='';if(s.preformatted){h=h.replace(/^<pre>/,'');h=h.replace(/<\/pre>$/,'');h='<pre>'+h+'</pre>'}if(tinyMCE.isGecko){h=h.replace(/<br \/>\s*<\/li>/g,'</li>');h=h.replace(/&nbsp;\s*<\/(dd|dt)>/g,'</$1>');h=h.replace(/<o:p _moz-userdefined="" \/>/g,'');h=h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g,'<td$1>'+nb+'</td>')}if(s.force_br_newlines)h=h.replace(/<p>(&nbsp;|&#160;)<\/p>/g,'<br />');h=tinyMCE._customCleanup(inst,on_save?"get_from_editor":"insert_to_editor",h);if(on_save){h=h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|'+s.visual_table_class+')','g'),'');h=h.replace(new RegExp(' ?class=""','g'),'')}if(s.remove_linebreaks&&!c.settings.indent)h=h.replace(/\n|\r/g,' ');if(d)t4=new Date().getTime();if(on_save&&c.settings.indent)h=c.formatHTML(h);if(on_submit&&(s.encoding=="xml"||s.encoding=="html"))h=c.xmlEncode(h);if(d)t5=new Date().getTime();if(c.settings.debug)tinyMCE.debug("Cleanup in ms: Pre="+(t2-t1)+", Serialize: "+(t3-t2)+", Post: "+(t4-t3)+", Format: "+(t5-t4)+", Sum: "+(t5-t1)+".");return h}});function TinyMCE_Cleanup(){this.isIE=(navigator.appName=="Microsoft Internet Explorer");this.rules=tinyMCE.clearArray([]);this.settings={indent_elements:'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',newline_before_elements:'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',newline_after_elements:'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',newline_before_after_elements:'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',indent_char:'\t',indent_levels:1,entity_encoding:'raw',valid_elements:'*[*]',entities:'',url_converter:'',invalid_elements:'',verify_html:false};this.vElements=tinyMCE.clearArray([]);this.vElementsRe='';this.closeElementsRe=/^(IMG|BR|HR|LINK|META|BASE|INPUT|AREA)$/;this.codeElementsRe=/^(SCRIPT|STYLE)$/;this.serializationId=0;this.mceAttribs={href:'mce_href',src:'mce_src',type:'mce_type'}}TinyMCE_Cleanup.prototype={init:function(s){var n,a,i,ir,or,st;for(n in s)this.settings[n]=s[n];s=this.settings;this.inRe=this._arrayToRe(s.indent_elements.split(','),'','^<(',')[^>]*');this.ouRe=this._arrayToRe(s.indent_elements.split(','),'','^<\\/(',')[^>]*');this.nlBeforeRe=this._arrayToRe(s.newline_before_elements.split(','),'gi','<(',')([^>]*)>');this.nlAfterRe=this._arrayToRe(s.newline_after_elements.split(','),'gi','<(',')([^>]*)>');this.nlBeforeAfterRe=this._arrayToRe(s.newline_before_after_elements.split(','),'gi','<(\\/?)(',')([^>]*)>');this.serializedNodes=[];this.serializationId=0;if(s.invalid_elements!=='')this.iveRe=this._arrayToRe(s.invalid_elements.toUpperCase().split(','),'g','^(',')$');else this.iveRe=null;st='';for(i=0;i<s.indent_levels;i++)st+=s.indent_char;this.inStr=st;if(!s.verify_html){s.valid_elements='*[*]';s.extended_valid_elements=''}this.fillStr=s.entity_encoding=="named"?"&nbsp;":"&#160;";this.idCount=0;this.xmlEncodeRe=new RegExp('[\u007F-\uFFFF<>&"]','g')},addRuleStr:function(s){var r=this.parseRuleStr(s),n;for(n in r){if(r[n])this.rules[n]=r[n]}this.vElements=tinyMCE.clearArray([]);for(n in this.rules){if(this.rules[n])this.vElements[this.vElements.length]=this.rules[n].tag}this.vElementsRe=this._arrayToRe(this.vElements,'')},isValid:function(n){if(!this.rulesDone)this._setupRules();if(!n)return true;n=n.replace(/[^a-z0-9]+/gi,'').toUpperCase();return!tinyMCE.getParam('cleanup')||this.vElementsRe.test(n)},addChildRemoveRuleStr:function(s){var x,y,p,i,t,tn,ta,cl,r;if(!s)return;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r="^(";cl=this.split(/\|/,p[1]);for(i=0;i<cl.length;i++){if(cl[i]=='%istrict')r+=tinyMCE.inlineStrict;else if(cl[i]=='%itrans')r+=tinyMCE.inlineTransitional;else if(cl[i]=='%istrict_na')r+=tinyMCE.inlineStrict.substring(2);else if(cl[i]=='%itrans_na')r+=tinyMCE.inlineTransitional.substring(2);else if(cl[i]=='%btrans')r+=tinyMCE.blockElms;else if(cl[i]=='%strict')r+=tinyMCE.blockStrict;else r+=(cl[i].charAt(0)!='#'?cl[i].toUpperCase():cl[i]);r+=(i!=cl.length-1?'|':'')}r+=')$';if(this.childRules==null)this.childRules=tinyMCE.clearArray([]);this.childRules[tn[y]]=new RegExp(r);if(p.length>1)this.childRules[tn[y]].wrapTag=p[2]}}},parseRuleStr:function(s){var ta,p,r,a,i,x,px,t,tn,y,av,or=tinyMCE.clearArray([]),dv;if(s==null||s.length==0)return or;ta=s.split(',');for(x=0;x<ta.length;x++){s=ta[x];if(s.length==0)continue;p=this.split(/\[|\]/,s);if(p==null||p.length<1)t=s.toUpperCase();else t=p[0].toUpperCase();tn=this.split('/',t);for(y=0;y<tn.length;y++){r={};r.tag=tn[y];r.forceAttribs=null;r.defaultAttribs=null;r.validAttribValues=null;px=r.tag.charAt(0);r.forceOpen=px=='+';r.removeEmpty=px=='-';r.fill=px=='#';r.tag=r.tag.replace(/\+|-|#/g,'');r.oTagName=tn[0].replace(/\+|-|#/g,'').toLowerCase();r.isWild=new RegExp('\\*|\\?|\\+','g').test(r.tag);r.validRe=new RegExp(this._wildcardToRe('^'+r.tag+'$'));if(p.length>1){r.vAttribsRe='^(';a=this.split(/\|/,p[1]);for(i=0;i<a.length;i++){t=a[i];if(t.charAt(0)=='!'){a[i]=t=t.substring(1);if(!r.reqAttribsRe)r.reqAttribsRe='\\s+('+t;else r.reqAttribsRe+='|'+t}av=new RegExp('(=|:|<)(.*?)$').exec(t);t=t.replace(new RegExp('(=|:|<).*?$'),'');if(av&&av.length>0){if(av[0].charAt(0)==':'){if(!r.forceAttribs)r.forceAttribs=tinyMCE.clearArray([]);r.forceAttribs[t.toLowerCase()]=av[0].substring(1)}else if(av[0].charAt(0)=='='){if(!r.defaultAttribs)r.defaultAttribs=tinyMCE.clearArray([]);dv=av[0].substring(1);r.defaultAttribs[t.toLowerCase()]=dv==''?"mce_empty":dv}else if(av[0].charAt(0)=='<'){if(!r.validAttribValues)r.validAttribValues=tinyMCE.clearArray([]);r.validAttribValues[t.toLowerCase()]=this._arrayToRe(this.split('?',av[0].substring(1)),'i')}}r.vAttribsRe+=''+t.toLowerCase()+(i!=a.length-1?'|':'');a[i]=t.toLowerCase()}if(r.reqAttribsRe)r.reqAttribsRe=new RegExp(r.reqAttribsRe+')=\"','g');r.vAttribsRe+=')$';r.vAttribsRe=this._wildcardToRe(r.vAttribsRe);r.vAttribsReIsWild=new RegExp('\\*|\\?|\\+','g').test(r.vAttribsRe);r.vAttribsRe=new RegExp(r.vAttribsRe);r.vAttribs=a.reverse();}else{r.vAttribsRe='';r.vAttribs=tinyMCE.clearArray([]);r.vAttribsReIsWild=false}or[r.tag]=r}}return or},serializeNodeAsXML:function(n){var s,b;if(!this.xmlDoc){if(this.isIE){try{this.xmlDoc=new ActiveXObject('MSXML2.DOMDocument')}catch(e){}if(!this.xmlDoc)try{this.xmlDoc=new ActiveXObject('Microsoft.XmlDom')}catch(e){}}else this.xmlDoc=document.implementation.createDocument('','',null);if(!this.xmlDoc)alert("Error XML Parser could not be found.")}if(this.xmlDoc.firstChild)this.xmlDoc.removeChild(this.xmlDoc.firstChild);b=this.xmlDoc.createElement("html");b=this.xmlDoc.appendChild(b);this._convertToXML(n,b);if(this.isIE)return this.xmlDoc.xml;else return new XMLSerializer().serializeToString(this.xmlDoc)},_convertToXML:function(n,xn){var xd,el,i,l,cn,at,no,hc=false;if(tinyMCE.isRealIE&&this._isDuplicate(n))return;xd=this.xmlDoc;switch(n.nodeType){case 1:hc=n.hasChildNodes();el=xd.createElement(n.nodeName.toLowerCase());at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&no.nodeValue)el.setAttribute(no.nodeName.toLowerCase(),no.nodeValue)}if(!hc&&!this.closeElementsRe.test(n.nodeName))el.appendChild(xd.createTextNode(""));xn=xn.appendChild(el);break;case 3:xn.appendChild(xd.createTextNode(n.nodeValue));return;case 8:xn.appendChild(xd.createComment(n.nodeValue));return}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)this._convertToXML(cn[i],xn)}},serializeNodeAsHTML:function(n,inn){var en,no,h='',i,l,t,st,r,cn,va=false,f=false,at,hc,cr,nn;if(!this.rulesDone)this._setupRules();if(tinyMCE.isRealIE&&this._isDuplicate(n))return'';if(n.parentNode&&this.childRules!=null){cr=this.childRules[n.parentNode.nodeName];if(typeof(cr)!="undefined"&&!cr.test(n.nodeName)){st=true;t=null}}switch(n.nodeType){case 1:hc=n.hasChildNodes();if(st)break;nn=n.nodeName;if(tinyMCE.isRealIE){if(n.nodeName.indexOf('/')!=-1)break;if(n.scopeName&&n.scopeName!='HTML')nn=n.scopeName.toUpperCase()+':'+nn.toUpperCase()}else if(tinyMCE.isOpera&&nn.indexOf(':')>0)nn=nn.toUpperCase();if(this.settings.convert_fonts_to_spans){if(this.settings.on_save&&nn=='FONT')nn='SPAN';if(!this.settings.on_save&&nn=='SPAN')nn='FONT'}if(this.vElementsRe.test(nn)&&(!this.iveRe||!this.iveRe.test(nn))&&!inn){va=true;r=this.rules[nn];if(!r){at=this.rules;for(no in at){if(at[no]&&at[no].validRe.test(nn)){r=at[no];break}}}en=r.isWild?nn.toLowerCase():r.oTagName;f=r.fill;if(r.removeEmpty&&!hc)return"";t='<'+en;if(r.vAttribsReIsWild){at=n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified&&r.vAttribsRe.test(no.nodeName))t+=this._serializeAttribute(n,r,no.nodeName)}}else{for(i=r.vAttribs.length-1;i>-1;i--)t+=this._serializeAttribute(n,r,r.vAttribs[i])}if(!this.settings.on_save){at=this.mceAttribs;for(no in at){if(at[no])t+=this._serializeAttribute(n,r,at[no])}}if(r.reqAttribsRe&&!t.match(r.reqAttribsRe))t=null;if(t!=null&&this.closeElementsRe.test(nn))return t+' />';if(t!=null)h+=t+'>';if(this.isIE&&this.codeElementsRe.test(nn))h+=n.innerHTML}break;case 3:if(st)break;if(n.parentNode&&this.codeElementsRe.test(n.parentNode.nodeName))return this.isIE?'':n.nodeValue;return this.xmlEncode(n.nodeValue);case 8:if(st)break;return"<!--"+this._trimComment(n.nodeValue)+"-->"}if(hc){cn=n.childNodes;for(i=0,l=cn.length;i<l;i++)h+=this.serializeNodeAsHTML(cn[i])}if(f&&!hc)h+=this.fillStr;if(t!=null&&va)h+='</'+en+'>';return h},_serializeAttribute:function(n,r,an){var av='',t,os=this.settings.on_save;if(os&&(an.indexOf('mce_')==0||an.indexOf('_moz')==0))return'';if(os&&this.mceAttribs[an])av=this._getAttrib(n,this.mceAttribs[an]);if(av.length==0)av=this._getAttrib(n,an);if(av.length==0&&r.defaultAttribs&&(t=r.defaultAttribs[an])){av=t;if(av=="mce_empty")return" "+an+'=""'}if(r.forceAttribs&&(t=r.forceAttribs[an]))av=t;if(os&&av.length!=0&&/^(src|href|longdesc)$/.test(an))av=this._urlConverter(this,n,av);if(av.length!=0&&r.validAttribValues&&r.validAttribValues[an]&&!r.validAttribValues[an].test(av))return"";if(av.length!=0&&av=="{$uid}")av="uid_"+(this.idCount++);if(av.length!=0){if(an.indexOf('on')!=0)av=this.xmlEncode(av,1);return" "+an+"="+'"'+av+'"'}return""},formatHTML:function(h){var s=this.settings,p='',i=0,li=0,o='',l;h=h.replace(/<pre([^>]*)>(.*?)<\/pre>/gi,function(a,b,c){c=c.replace(/<br\s*\/>/gi,'\n');return'<pre'+b+'>'+c+'</pre>'});h=h.replace(/\r/g,'');h='\n'+h;h=h.replace(new RegExp('\\n\\s+','gi'),'\n');h=h.replace(this.nlBeforeRe,'\n<$1$2>');h=h.replace(this.nlAfterRe,'<$1$2>\n');h=h.replace(this.nlBeforeAfterRe,'\n<$1$2$3>\n');h+='\n';while((i=h.indexOf('\n',i+1))!=-1){if((l=h.substring(li+1,i)).length!=0){if(this.ouRe.test(l)&&p.length>=s.indent_levels)p=p.substring(s.indent_levels);o+=p+l+'\n';if(this.inRe.test(l))p+=this.inStr}li=i}return o},xmlEncode:function(s){var cl=this,re=this.xmlEncodeRe;if(!this.entitiesDone)this._setupEntities();switch(this.settings.entity_encoding){case"raw":return tinyMCE.xmlEncode(s);case"named":return s.replace(re,function(c){var b=cl.entities[c.charCodeAt(0)];return b?'&'+b+';':c});case"numeric":return s.replace(re,function(c){return'&#'+c.charCodeAt(0)+';'})}return s},split:function(re,s){var i,l,o=[],c=s.split(re);for(i=0,l=c.length;i<l;i++){if(c[i]!=='')o[i]=c[i]}return o},_trimComment:function(s){s=s.replace(new RegExp('\\smce_src=\"[^\"]*\"','gi'),"");s=s.replace(new RegExp('\\smce_href=\"[^\"]*\"','gi'),"");return s},_getAttrib:function(e,n,d){var v,ex,nn;if(typeof(d)=="undefined")d="";if(!e||e.nodeType!=1)return d;try{v=e.getAttribute(n,0)}catch(ex){v=e.getAttribute(n,2)}if(n=="class"&&!v)v=e.className;if(this.isIE){if(n=="http-equiv")v=e.httpEquiv;nn=e.nodeName;if(nn=="FORM"&&n=="enctype"&&v=="application/x-www-form-urlencoded")v="";if(nn=="INPUT"&&n=="size"&&v=="20")v="";if(nn=="INPUT"&&n=="maxlength"&&v=="2147483647")v="";if(n=="width"||n=="height")v=e.getAttribute(n,2)}if(n=='style'&&v){if(!tinyMCE.isOpera)v=e.style.cssText;v=tinyMCE.serializeStyle(tinyMCE.parseStyle(v))}if(this.settings.on_save&&n.indexOf('on')!=-1&&this.settings.on_save&&v&&v!=='')v=tinyMCE.cleanupEventStr(v);return(v&&v!=='')?''+v:d},_urlConverter:function(c,n,v){if(!c.settings.on_save)return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,v);else if(tinyMCE.getParam('convert_urls')){if(!this.urlConverter)this.urlConverter=eval(tinyMCE.settings.urlconverter_callback);return this.urlConverter(v,n,true)}return v},_arrayToRe:function(a,op,be,af){var i,r;op=typeof(op)=="undefined"?"gi":op;be=typeof(be)=="undefined"?"^(":be;af=typeof(af)=="undefined"?")$":af;r=be;for(i=0;i<a.length;i++)r+=this._wildcardToRe(a[i])+(i!=a.length-1?"|":"");r+=af;return new RegExp(r,op)},_wildcardToRe:function(s){s=s.replace(/\?/g,'(\\S?)');s=s.replace(/\+/g,'(\\S+)');s=s.replace(/\*/g,'(\\S*)');return s},_setupEntities:function(){var n,a,i,s=this.settings;if(s.entity_encoding=="named"){n=tinyMCE.clearArray([]);a=this.split(',',s.entities);for(i=0;i<a.length;i+=2)n[a[i]]=a[i+1];this.entities=n}this.entitiesDone=true},_setupRules:function(){var s=this.settings;this.addRuleStr(s.valid_elements);this.addRuleStr(s.extended_valid_elements);this.addChildRemoveRuleStr(s.valid_child_elements);this.rulesDone=true},_isDuplicate:function(n){var i,l,sn;if(!this.settings.fix_content_duplication)return false;if(tinyMCE.isRealIE&&n.nodeType==1){if(n.mce_serialized==this.serializationId)return true;n.setAttribute('mce_serialized',this.serializationId)}else{sn=this.serializedNodes;for(i=0,l=sn.length;i<l;i++){if(sn[i]==n)return true}sn.push(n)}return false}};tinyMCE.add(TinyMCE_Engine,{createTagHTML:function(tn,a,h){var o='',f=tinyMCE.xmlEncode,n;o='<'+tn;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)o+=' '+f(n)+'="'+f(''+a[n])+'"'}}o+=!h?' />':'>'+h+'</'+tn+'>';return o},createTag:function(d,tn,a,h){var o=d.createElement(tn),n;if(a){for(n in a){if(typeof(a[n])!='function'&&a[n]!=null)tinyMCE.setAttrib(o,n,a[n])}}if(h)o.innerHTML=h;return o},getElementByAttributeValue:function(n,e,a,v){return(n=this.getElementsByAttributeValue(n,e,a,v)).length==0?null:n[0]},getElementsByAttributeValue:function(n,e,a,v){var i,nl=n.getElementsByTagName(e),o=[];for(i=0;i<nl.length;i++){if(tinyMCE.getAttrib(nl[i],a).indexOf(v)!=-1)o[o.length]=nl[i]}return o},isBlockElement:function(n){return n!=null&&n.nodeType==1&&this.blockRegExp.test(n.nodeName)},getParentBlockElement:function(n,r){return this.getParentNode(n,function(n){return tinyMCE.isBlockElement(n)},r);return null},insertAfter:function(n,r){if(r.nextSibling)r.parentNode.insertBefore(n,r.nextSibling);else r.parentNode.appendChild(n)},setInnerHTML:function(e,h){var i,nl,n;if(tinyMCE.isGecko){h=h.replace(/<embed([^>]*)>/gi,'<tmpembed$1>');h=h.replace(/<em([^>]*)>/gi,'<i$1>');h=h.replace(/<tmpembed([^>]*)>/gi,'<embed$1>');h=h.replace(/<strong([^>]*)>/gi,'<b$1>');h=h.replace(/<\/strong>/gi,'</b>');h=h.replace(/<\/em>/gi,'</i>')}if(tinyMCE.isRealIE){h=h.replace(/\s\/>/g,'>');h=h.replace(/<p([^>]*)>\u00A0?<\/p>/gi,'<p$1 mce_keep="true">&nbsp;</p>');h=h.replace(/<p([^>]*)>\s*&nbsp;\s*<\/p>/gi,'<p$1 mce_keep="true">&nbsp;</p>');h=h.replace(/<p([^>]*)>\s+<\/p>/gi,'<p$1 mce_keep="true">&nbsp;</p>');e.innerHTML=tinyMCE.uniqueTag+h;e.firstChild.removeNode(true);nl=e.getElementsByTagName("p");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.nodeName=='P'&&!n.hasChildNodes()&&!n.mce_keep)n.parentNode.removeChild(n)}}else{h=this.fixGeckoBaseHREFBug(1,e,h);e.innerHTML=h;this.fixGeckoBaseHREFBug(2,e,h)}},getOuterHTML:function(e){var d;if(tinyMCE.isIE)return e.outerHTML;d=e.ownerDocument.createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML},setOuterHTML:function(e,h,d){var d=typeof(d)=="undefined"?e.ownerDocument:d,i,nl,t;if(tinyMCE.isIE&&e.nodeType==1)e.outerHTML=h;else{t=d.createElement("body");t.innerHTML=h;for(i=0,nl=t.childNodes;i<nl.length;i++)e.parentNode.insertBefore(nl[i].cloneNode(true),e);e.parentNode.removeChild(e)}},_getElementById:function(id,d){var e,i,j,f;if(typeof(d)=="undefined")d=document;e=d.getElementById(id);if(!e){f=d.forms;for(i=0;i<f.length;i++){for(j=0;j<f[i].elements.length;j++){if(f[i].elements[j].name==id){e=f[i].elements[j];break}}}}return e},getNodeTree:function(n,na,t,nn){return this.selectNodes(n,function(n){return(!t||n.nodeType==t)&&(!nn||n.nodeName==nn)},na?na:[])},getParentElement:function(n,na,f,r){var re=na?new RegExp('^('+na.toUpperCase().replace(/,/g,'|')+')$'):0,v;if(f&&typeof(f)=='string')return this.getParentElement(n,na,function(no){return tinyMCE.getAttrib(no,f)!==''});return this.getParentNode(n,function(n){return((n.nodeType==1&&!re)||(re&&re.test(n.nodeName)))&&(!f||f(n))},r)},getParentNode:function(n,f,r){while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode}return null},getAttrib:function(elm,name,dv){var v;if(typeof(dv)=="undefined")dv="";if(!elm||elm.nodeType!=1)return dv;try{v=elm.getAttribute(name,0)}catch(ex){v=elm.getAttribute(name,2)}if(name=="class"&&!v)v=elm.className;if(tinyMCE.isGecko){if(name=="src"&&elm.src!=null&&elm.src!=='')v=elm.src;if(name=="href"&&elm.href!=null&&elm.href!=='')v=elm.href}else if(tinyMCE.isIE){switch(name){case"http-equiv":v=elm.httpEquiv;break;case"width":case"height":v=elm.getAttribute(name,2);break}}if(name=="style"&&!tinyMCE.isOpera)v=elm.style.cssText;return(v&&v!=='')?v:dv},setAttrib:function(el,name,va,fix){if(typeof(va)=="number"&&va!=null)va=""+va;if(fix){if(va==null)va="";va=va.replace(/[^0-9%]/g,'')}if(name=="style")el.style.cssText=va;if(name=="class")el.className=va;if(va!=null&&va!==''&&va!=-1)el.setAttribute(name,va);else el.removeAttribute(name)},setStyleAttrib:function(e,n,v){e.style[n]=v;if(tinyMCE.isIE&&v==null||v==''){v=tinyMCE.serializeStyle(tinyMCE.parseStyle(e.style.cssText));e.style.cssText=v;e.setAttribute("style",v)}},switchClass:function(ei,c){var e;if(tinyMCE.switchClassCache[ei])e=tinyMCE.switchClassCache[ei];else e=tinyMCE.switchClassCache[ei]=document.getElementById(ei);if(e){if(tinyMCE.settings.button_tile_map&&e.className&&e.className.indexOf('mceTiledButton')==0)c='mceTiledButton '+c;e.className=c}},getAbsPosition:function(n,cn){var l=0,t=0;while(n&&n!=cn){l+=n.offsetLeft;t+=n.offsetTop;n=n.offsetParent}return{absLeft:l,absTop:t}},prevNode:function(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},nextNode:function(e,n){var a=n.split(','),i;while((e=e.nextSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e}}return null},selectElements:function(n,na,f){var i,a=[],nl,x;for(x=0,na=na.split(',');x<na.length;x++)for(i=0,nl=n.getElementsByTagName(na[x]);i<nl.length;i++)(!f||f(nl[i]))&&a.push(nl[i]);return a},selectNodes:function(n,f,a){var i;if(!a)a=[];if(f(n))a[a.length]=n;if(n.hasChildNodes()){for(i=0;i<n.childNodes.length;i++)tinyMCE.selectNodes(n.childNodes[i],f,a)}return a},addCSSClass:function(e,c,b){var o=this.removeCSSClass(e,c);return e.className=b?c+(o!==''?(' '+o):''):(o!==''?(o+' '):'')+c},removeCSSClass:function(e,c){c=e.className.replace(new RegExp("(^|\\s+)"+c+"(\\s+|$)"),' ');return e.className=c!=' '?c:''},hasCSSClass:function(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className)},renameElement:function(e,n,d){var ne,i,ar;d=typeof(d)=="undefined"?tinyMCE.selectedInstance.getDoc():d;if(e){ne=d.createElement(n);ar=e.attributes;for(i=ar.length-1;i>-1;i--){if(ar[i].specified&&ar[i].nodeValue)ne.setAttribute(ar[i].nodeName.toLowerCase(),ar[i].nodeValue)}ar=e.childNodes;for(i=0;i<ar.length;i++)ne.appendChild(ar[i].cloneNode(true));e.parentNode.replaceChild(ne,e)}},getViewPort:function(w){var d=w.document,m=d.compatMode=='CSS1Compat',b=d.body,de=d.documentElement;return{left:w.pageXOffset||(m?de.scrollLeft:b.scrollLeft),top:w.pageYOffset||(m?de.scrollTop:b.scrollTop),width:w.innerWidth||(m?de.clientWidth:b.clientWidth),height:w.innerHeight||(m?de.clientHeight:b.clientHeight)}},getStyle:function(n,na,d){if(!n)return false;if(tinyMCE.isGecko&&n.ownerDocument.defaultView){try{return n.ownerDocument.defaultView.getComputedStyle(n,null).getPropertyValue(na)}catch(n){return null}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase()});if(n.currentStyle)return n.currentStyle[na];return false}});tinyMCE.add(TinyMCE_Engine,{parseURL:function(url_str){var urlParts=[],i,pos,lastPos,chr;if(url_str){pos=url_str.indexOf('://');if(pos!=-1){urlParts.protocol=url_str.substring(0,pos);lastPos=pos+3}for(i=lastPos;i<url_str.length;i++){chr=url_str.charAt(i);if(chr==':')break;if(chr=='/')break}pos=i;urlParts.host=url_str.substring(lastPos,pos);urlParts.port="";lastPos=pos;if(url_str.charAt(pos)==':'){pos=url_str.indexOf('/',lastPos);urlParts.port=url_str.substring(lastPos+1,pos)}lastPos=pos;pos=url_str.indexOf('?',lastPos);if(pos==-1)pos=url_str.indexOf('#',lastPos);if(pos==-1)pos=url_str.length;urlParts.path=url_str.substring(lastPos,pos);lastPos=pos;if(url_str.charAt(pos)=='?'){pos=url_str.indexOf('#');pos=(pos==-1)?url_str.length:pos;urlParts.query=url_str.substring(lastPos+1,pos)}lastPos=pos;if(url_str.charAt(pos)=='#'){pos=url_str.length;urlParts.anchor=url_str.substring(lastPos+1,pos)}}return urlParts},serializeURL:function(up){var o="";if(up.protocol)o+=up.protocol+"://";if(up.host)o+=up.host;if(up.port)o+=":"+up.port;if(up.path)o+=up.path;if(up.query)o+="?"+up.query;if(up.anchor)o+="#"+up.anchor;return o},convertAbsoluteURLToRelativeURL:function(base_url,url_to_relative){var baseURL=this.parseURL(base_url),targetURL=this.parseURL(url_to_relative);var i,strTok1,strTok2,breakPoint=0,outPath="",forceSlash=false;var fileName,pos;if(targetURL.path=='')targetURL.path="/";else forceSlash=true;base_url=baseURL.path.substring(0,baseURL.path.lastIndexOf('/'));strTok1=base_url.split('/');strTok2=targetURL.path.split('/');if(strTok1.length>=strTok2.length){for(i=0;i<strTok1.length;i++){if(i>=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(strTok1.length<strTok2.length){for(i=0;i<strTok2.length;i++){if(i>=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break}}}if(breakPoint==1)return targetURL.path;for(i=0;i<(strTok1.length-(breakPoint-1));i++)outPath+="../";for(i=breakPoint-1;i<strTok2.length;i++){if(i!=(breakPoint-1))outPath+="/"+strTok2[i];else outPath+=strTok2[i]}targetURL.protocol=null;targetURL.host=null;targetURL.port=null;targetURL.path=outPath==''&&forceSlash?"/":outPath;fileName=baseURL.path;if((pos=fileName.lastIndexOf('/'))!=-1)fileName=fileName.substring(pos+1);if(fileName==targetURL.path&&targetURL.anchor!=='')targetURL.path="";if(targetURL.path==''&&!targetURL.anchor)targetURL.path=fileName!==''?fileName:"/";return this.serializeURL(targetURL)},convertRelativeToAbsoluteURL:function(base_url,relative_url){var baseURL=this.parseURL(base_url),baseURLParts,relURLParts,newRelURLParts,numBack,relURL=this.parseURL(relative_url),i;var len,absPath,start,end,newBaseURLParts;if(relative_url==''||relative_url.indexOf('://')!=-1||/^(mailto:|javascript:|#|\/)/.test(relative_url))return relative_url;baseURLParts=baseURL.path.split('/');relURLParts=relURL.path.split('/');newBaseURLParts=[];for(i=baseURLParts.length-1;i>=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i]}baseURLParts=newBaseURLParts.reverse();newRelURLParts=[];numBack=0;for(i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue}if(numBack>0){numBack--;continue}newRelURLParts[newRelURLParts.length]=relURLParts[i]}relURLParts=newRelURLParts.reverse();len=baseURLParts.length-numBack;absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');start="";end="";relURL.protocol=baseURL.protocol;relURL.host=baseURL.host;relURL.port=baseURL.port;if(relURL.path.charAt(relURL.path.length-1)=="/")absPath+="/";relURL.path=absPath;return this.serializeURL(relURL)},convertURL:function(url,node,on_save){var dl=document.location,start,portPart,urlParts,baseUrlParts,tmpUrlParts,curl;var prot=dl.protocol,host=dl.hostname,port=dl.port;if(prot=="file:")return url;url=tinyMCE.regexpReplace(url,'(http|https):///','/');if(url.indexOf('mailto:')!=-1||url.indexOf('javascript:')!=-1||/^[ \t\r\n\+]*[#\?]/.test(url))return url;if(!tinyMCE.isIE&&!on_save&&url.indexOf("://")==-1&&url.charAt(0)!='/')return tinyMCE.settings.base_href+url;if(on_save&&tinyMCE.getParam('relative_urls')){curl=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(curl.charAt(0)=='/')curl=tinyMCE.settings.document_base_prefix+curl;urlParts=tinyMCE.parseURL(curl);tmpUrlParts=tinyMCE.parseURL(tinyMCE.settings.document_base_url);if(urlParts.host==tmpUrlParts.host&&(urlParts.port==tmpUrlParts.port))return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings.document_base_url,curl)}if(!tinyMCE.getParam('relative_urls')){urlParts=tinyMCE.parseURL(url);baseUrlParts=tinyMCE.parseURL(tinyMCE.settings.base_href);url=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,url);if(urlParts.anchor&&urlParts.path==baseUrlParts.path)return"#"+urlParts.anchor}if(tinyMCE.getParam('remove_script_host')){start="";portPart="";if(port!=='')portPart=":"+port;start=prot+"//"+host+portPart+"/";if(url.indexOf(start)==0)url=url.substring(start.length-1)}return url},convertAllRelativeURLs:function(body){var i,elms,src,href,mhref,msrc;elms=body.getElementsByTagName("img");for(i=0;i<elms.length;i++){src=tinyMCE.getAttrib(elms[i],'src');msrc=tinyMCE.getAttrib(elms[i],'mce_src');if(msrc!=='')src=msrc;if(src!==''){src=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,src);elms[i].setAttribute("src",src)}}elms=body.getElementsByTagName("a");for(i=0;i<elms.length;i++){href=tinyMCE.getAttrib(elms[i],'href');mhref=tinyMCE.getAttrib(elms[i],'mce_href');if(mhref!=='')href=mhref;if(href&&href!==''){href=tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href,href);elms[i].setAttribute("href",href)}}}});tinyMCE.add(TinyMCE_Engine,{clearArray:function(a){var n;for(n in a)a[n]=null;return a},explode:function(d,s){var ar=s.split(d),oar=[],i;for(i=0;i<ar.length;i++){if(ar[i]!=='')oar[oar.length]=ar[i]}return oar}});tinyMCE.add(TinyMCE_Engine,{_setEventsEnabled:function(node,state){var evs,x,y,elms,i,event;var events=['onfocus','onblur','onclick','ondblclick','onmousedown','onmouseup','onmouseover','onmousemove','onmouseout','onkeypress','onkeydown','onkeydown','onkeyup'];evs=tinyMCE.settings.event_elements.split(',');for(y=0;y<evs.length;y++){elms=node.getElementsByTagName(evs[y]);for(i=0;i<elms.length;i++){event="";for(x=0;x<events.length;x++){if((event=tinyMCE.getAttrib(elms[i],events[x]))!==''){event=tinyMCE.cleanupEventStr(""+event);if(!state)event="return true;"+event;else event=event.replace(/^return true;/gi,'');elms[i].removeAttribute(events[x]);elms[i].setAttribute(events[x],event)}}}}},_eventPatch:function(editor_id){var n,inst,win,e;if(typeof(tinyMCE)=="undefined")return true;try{if(tinyMCE.selectedInstance){win=tinyMCE.selectedInstance.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(!tinyMCE.isInstance(inst))continue;inst.select();win=inst.getWin();if(win&&win.event){e=win.event;if(!e.target)e.target=e.srcElement;TinyMCE_Engine.prototype.handleEvent(e);return}}}catch(ex){}},findEvent:function(e){var n,inst;if(e)return e;for(n in tinyMCE.instances){inst=tinyMCE.instances[n];if(tinyMCE.isInstance(inst)&&inst.getWin().event)return inst.getWin().event}return null},unloadHandler:function(){tinyMCE.triggerSave(true,true)},addEventHandlers:function(inst){this.setEventHandlers(inst,1)},setEventHandlers:function(inst,s){var doc=inst.getDoc(),ie,ot,i,f=s?tinyMCE.addEvent:tinyMCE.removeEvent;ie=['keypress','keyup','keydown','click','mouseup','mousedown','controlselect','dblclick'];ot=['keypress','keyup','keydown','click','mouseup','mousedown','focus','blur','dragdrop'];inst.switchSettings();if(tinyMCE.isIE){for(i=0;i<ie.length;i++)f(doc,ie[i],TinyMCE_Engine.prototype._eventPatch)}else{for(i=0;i<ot.length;i++)f(doc,ot[i],tinyMCE.handleEvent);try{doc.designMode="On"}catch(e){}}},onMouseMove:function(){var inst,lh;if(tinyMCE.lastHover){lh=tinyMCE.lastHover;if(lh.className.indexOf('mceMenu')!=-1)tinyMCE._menuButtonEvent('out',lh);else lh.className=lh.className;tinyMCE.lastHover=null}if(!tinyMCE.hasMouseMoved){inst=tinyMCE.selectedInstance;if(inst.isFocused){inst.undoBookmark=inst.selection.getBookmark();tinyMCE.hasMouseMoved=true}}},cancelEvent:function(e){if(!e)return false;if(tinyMCE.isIE){e.returnValue=false;e.cancelBubble=true}else{e.preventDefault();e.stopPropagation&&e.stopPropagation()}return false},addEvent:function(o,n,h){if(n!='unload'){function clean(){var ex;try{tinyMCE.removeEvent(o,n,h);tinyMCE.removeEvent(window,'unload',clean);o=n=h=null}catch(ex){}}tinyMCE.addEvent(window,'unload',clean)}if(o.attachEvent)o.attachEvent("on"+n,h);else o.addEventListener(n,h,false)},removeEvent:function(o,n,h){if(o.detachEvent)o.detachEvent("on"+n,h);else o.removeEventListener(n,h,false)},addSelectAccessibility:function(e,s,w){if(!s._isAccessible){s.onkeydown=tinyMCE.accessibleEventHandler;s.onblur=tinyMCE.accessibleEventHandler;s._isAccessible=true;s._win=w}return false},accessibleEventHandler:function(e){var elm,win=this._win;e=tinyMCE.isIE?win.event:e;elm=tinyMCE.isIE?e.srcElement:e.target;if(e.type=="blur"){if(elm.oldonchange){elm.onchange=elm.oldonchange;elm.oldonchange=null}return true}if(elm.nodeName=="SELECT"&&!elm.oldonchange){elm.oldonchange=elm.onchange;elm.onchange=null}if(e.keyCode==13||e.keyCode==32){elm.onchange=elm.oldonchange;elm.onchange();elm.oldonchange=null;tinyMCE.cancelEvent(e);return false}return true},_resetIframeHeight:function(){var ife;if(tinyMCE.isRealIE){ife=tinyMCE.selectedInstance.iframeElement;if(ife._oldHeight){ife.style.height=ife._oldHeight;ife.height=ife._oldHeight}}}});function TinyMCE_Selection(inst){this.instance=inst};TinyMCE_Selection.prototype={getSelectedHTML:function(){var inst=this.instance,e,r=this.getRng(),h;if(!r)return null;e=document.createElement("body");if(r.cloneContents)e.appendChild(document.importNode(r.cloneContents(),true));else if(typeof(r.item)!='undefined'||typeof(r.htmlText)!='undefined')e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();h=tinyMCE._cleanupHTML(inst,inst.contentDocument,inst.settings,e,e,false,true,false);return h},getSelectedText:function(){var inst=this.instance,d,r,s,t;if(tinyMCE.isIE){d=inst.getDoc();if(d.selection.type=="Text"){r=d.selection.createRange();t=r.text}else t=''}else{s=this.getSel();if(s&&s.toString)t=s.toString();else t=''}return t},getBookmark:function(simple){var inst=this.instance,rng=this.getRng(),doc=inst.getDoc(),b=inst.getBody();var trng,sx,sy,xx=-999999999,vp=inst.getViewPort();var sp,le,s,e,nl,i,si,ei,w;sx=vp.left;sy=vp.top;if(simple)return{rng:rng,scrollX:sx,scrollY:sy};if(tinyMCE.isRealIE){if(rng.item){e=rng.item(0);nl=b.getElementsByTagName(e.nodeName);for(i=0;i<nl.length;i++){if(e==nl[i]){sp=i;break}}return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy}}else{trng=doc.body.createTextRange();trng.moveToElementText(inst.getBody());trng.collapse(true);bp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(true);sp=Math.abs(trng.move('character',xx));trng=rng.duplicate();trng.collapse(false);le=Math.abs(trng.move('character',xx))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy}}}else{s=this.getSel();e=this.getFocusElement();if(!s)return null;if(e&&e.nodeName=='IMG'){return{start:-1,end:-1,index:sp,scrollX:sx,scrollY:sy}}if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=this._getPosText(b,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+s.anchorOffset,end:e.end+s.focusOffset,scrollX:sx,scrollY:sy}}else{e=this._getPosText(b,rng.startContainer,rng.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:e.start+rng.startOffset,end:e.end+rng.endOffset,scrollX:sx,scrollY:sy}}}return null},moveToBookmark:function(bookmark){var inst=this.instance,rng,nl,i,ex,b=inst.getBody(),sd;var doc=inst.getDoc(),win=inst.getWin(),sel=this.getSel();if(!bookmark)return false;if(tinyMCE.isSafari&&bookmark.rng){sel.setBaseAndExtent(bookmark.rng.startContainer,bookmark.rng.startOffset,bookmark.rng.endContainer,bookmark.rng.endOffset);return true}if(tinyMCE.isRealIE){if(bookmark.rng){try{bookmark.rng.select()}catch(ex){}return true}win.focus();if(bookmark.tag){rng=b.createControlRange();nl=b.getElementsByTagName(bookmark.tag);if(nl.length>bookmark.index){try{rng.addElement(nl[bookmark.index])}catch(ex){}}}else{try{if(bookmark.start<0)return true;rng=inst.getSel().createRange();rng.moveToElementText(inst.getBody());rng.collapse(true);rng.moveStart('character',bookmark.start);rng.moveEnd('character',bookmark.length)}catch(ex){return true}}rng.select();win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}if(tinyMCE.isGecko||tinyMCE.isOpera){if(!sel)return false;if(bookmark.rng){sel.removeAllRanges();sel.addRange(bookmark.rng)}if(bookmark.start!=-1&&bookmark.end!=-1){try{sd=this._getTextPos(b,bookmark.start,bookmark.end);rng=doc.createRange();rng.setStart(sd.startNode,sd.startOffset);rng.setEnd(sd.endNode,sd.endOffset);sel.removeAllRanges();sel.addRange(rng);if(!tinyMCE.isOpera)win.focus()}catch(ex){}}win.scrollTo(bookmark.scrollX,bookmark.scrollY);return true}return false},_getPosText:function(r,sn,en){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d}p+=n.nodeValue?n.nodeValue.length:0}return null},_getTextPos:function(r,sp,ep){var w=document.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){p+=n.nodeValue?n.nodeValue.length:0;if(p>=sp&&!d.startNode){d.startNode=n;d.startOffset=sp-(p-n.nodeValue.length)}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-n.nodeValue.length);return d}}return null},selectNode:function(node,collapse,select_text_node,to_start){var inst=this.instance,sel,rng,nodes;if(!node)return;if(typeof(collapse)=="undefined")collapse=true;if(typeof(select_text_node)=="undefined")select_text_node=false;if(typeof(to_start)=="undefined")to_start=true;if(inst.settings.auto_resize)inst.resizeToContent();if(tinyMCE.isRealIE){rng=inst.getDoc().body.createTextRange();try{rng.moveToElementText(node);if(collapse)rng.collapse(to_start);rng.select()}catch(e){}}else{sel=this.getSel();if(!sel)return;if(tinyMCE.isSafari){sel.setBaseAndExtent(node,0,node,node.innerText.length);if(collapse){if(to_start)sel.collapseToStart();else sel.collapseToEnd()}this.scrollToNode(node);return}rng=inst.getDoc().createRange();if(select_text_node){nodes=tinyMCE.getNodeTree(node,[],3);if(nodes.length>0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node)}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length)}else rng.collapse(to_start)}sel.removeAllRanges();sel.addRange(rng)}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node},scrollToNode:function(node){var inst=this.instance,w=inst.getWin(),vp=inst.getViewPort(),pos=tinyMCE.getAbsPosition(node),cvp,p,cwin;if(pos.absLeft<vp.left||pos.absLeft>vp.left+vp.width||pos.absTop<vp.top||pos.absTop>vp.top+(vp.height-25))w.scrollTo(pos.absLeft,pos.absTop-vp.height+25);if(inst.settings.auto_resize){cwin=inst.getContainerWin();cvp=tinyMCE.getViewPort(cwin);p=this.getAbsPosition(node);if(p.absLeft<cvp.left||p.absLeft>cvp.left+cvp.width||p.absTop<cvp.top||p.absTop>cvp.top+cvp.height)cwin.scrollTo(p.absLeft,p.absTop-cvp.height+25)}},getAbsPosition:function(n){var pos=tinyMCE.getAbsPosition(n),ipos=tinyMCE.getAbsPosition(this.instance.iframeElement);return{absLeft:ipos.absLeft+pos.absLeft,absTop:ipos.absTop+pos.absTop}},getSel:function(){var inst=this.instance;if(tinyMCE.isRealIE)return inst.getDoc().selection;return inst.contentWindow.getSelection()},getRng:function(){var s=this.getSel();if(s==null)return null;if(tinyMCE.isRealIE)return s.createRange();if(tinyMCE.isSafari&&!s.getRangeAt)return''+window.getSelection();if(s.rangeCount>0)return s.getRangeAt(0);return null},isCollapsed:function(){var r=this.getRng();if(r.item)return false;return r.boundingWidth==0||this.getSel().isCollapsed},collapse:function(b){var r=this.getRng(),s=this.getSel();if(r.select){r.collapse(b);r.select()}else{if(b)s.collapseToStart();else s.collapseToEnd()}},getFocusElement:function(){var inst=this.instance,doc,rng,sel,elm;if(tinyMCE.isRealIE){doc=inst.getDoc();rng=doc.selection.createRange();elm=rng.item?rng.item(0):rng.parentElement()}else{if(!tinyMCE.isSafari&&inst.isHidden())return inst.getBody();sel=this.getSel();rng=this.getRng();if(!sel||!rng)return null;elm=rng.commonAncestorContainer;if(!rng.collapsed){if(rng.startContainer==rng.endContainer){if(rng.startOffset-rng.endOffset<2){if(rng.startContainer.hasChildNodes())elm=rng.startContainer.childNodes[rng.startOffset]}}}elm=tinyMCE.getParentElement(elm);}return elm}};function TinyMCE_UndoRedo(inst){this.instance=inst;this.undoLevels=[];this.undoIndex=0;this.typingUndoIndex=-1;this.undoRedo=true};TinyMCE_UndoRedo.prototype={add:function(l){var b,customUndoLevels,newHTML,inst=this.instance,i,ul,ur;if(l){this.undoLevels[this.undoLevels.length]=l;return true}if(this.typingUndoIndex!=-1){this.undoIndex=this.typingUndoIndex;if(tinyMCE.typingUndoIndex!=-1)tinyMCE.undoIndex=tinyMCE.typingUndoIndex}newHTML=tinyMCE.trim(inst.getBody().innerHTML);if(this.undoLevels[this.undoIndex]&&newHTML!=this.undoLevels[this.undoIndex].content){inst.isNotDirty=false;tinyMCE.dispatchCallback(inst,'onchange_callback','onChange',inst);customUndoLevels=tinyMCE.settings.custom_undo_redo_levels;if(customUndoLevels!=-1&&this.undoLevels.length>customUndoLevels){for(i=0;i<this.undoLevels.length-1;i++)this.undoLevels[i]=this.undoLevels[i+1];this.undoLevels.length--;this.undoIndex--;}b=inst.undoBookmark;if(!b)b=inst.selection.getBookmark();this.undoIndex++;this.undoLevels[this.undoIndex]={content:newHTML,bookmark:b};ul=tinyMCE.undoLevels;for(i=tinyMCE.undoIndex+1;i<ul.length;i++){ur=ul[i].undoRedo;if(ur.undoIndex==ur.undoLevels.length-1)ur.undoIndex--;ur.undoLevels.length--}tinyMCE.undoLevels[tinyMCE.undoIndex++]=inst;tinyMCE.undoLevels.length=tinyMCE.undoIndex;this.undoLevels.length=this.undoIndex+1;return true}return false},undo:function(){var inst=this.instance;if(this.undoIndex>0){this.undoIndex--;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}},redo:function(){var inst=this.instance;tinyMCE.execCommand("mceEndTyping");if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;tinyMCE.setInnerHTML(inst.getBody(),this.undoLevels[this.undoIndex].content);inst.repaint();if(inst.settings.custom_undo_redo_restore_selection)inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark)}tinyMCE.triggerNodeChange()}};var TinyMCE_ForceParagraphs={_insertPara:function(inst,e){var doc=inst.getDoc(),sel=inst.getSel(),body=inst.getBody(),win=inst.contentWindow,rng=sel.getRangeAt(0);var rootElm=doc.documentElement,blockName="P",startNode,endNode,startBlock,endBlock;var rngBefore,rngAfter,direct,startNode,startOffset,endNode,endOffset,b=tinyMCE.isOpera?inst.selection.getBookmark():null;var paraBefore,paraAfter,startChop,endChop,contents,i;function isEmpty(para){var nodes;function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()==''}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;nodes=tinyMCE.getNodeTree(para,[],3);for(i=0;i<nodes.length;i++){if(!isEmptyHTML(nodes[i].nodeValue))return false}return true}rngBefore=doc.createRange();rngBefore.setStart(sel.anchorNode,sel.anchorOffset);rngBefore.collapse(true);rngAfter=doc.createRange();rngAfter.setStart(sel.focusNode,sel.focusOffset);rngAfter.collapse(true);direct=rngBefore.compareBoundaryPoints(rngBefore.START_TO_END,rngAfter)<0;startNode=direct?sel.anchorNode:sel.focusNode;startOffset=direct?sel.anchorOffset:sel.focusOffset;endNode=direct?sel.focusNode:sel.anchorNode;endOffset=direct?sel.focusOffset:sel.anchorOffset;startNode=startNode.nodeName=="HTML"?doc.body:startNode;startNode=startNode.nodeName=="BODY"?startNode.firstChild:startNode;endNode=endNode.nodeName=="BODY"?endNode.firstChild:endNode;startBlock=inst.getParentBlockElement(startNode);endBlock=inst.getParentBlockElement(endNode);if(startBlock&&(startBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(startBlock.style.position)))startBlock=null;if(endBlock&&(endBlock.nodeName=='CAPTION'||/absolute|relative|static/gi.test(endBlock.style.position)))endBlock=null;if(startBlock!=null){blockName=startBlock.nodeName;if(/(TD|TABLE|TH|CAPTION)/.test(blockName)||(blockName=="DIV"&&/left|right/gi.test(startBlock.style.cssFloat)))blockName="P"}if(tinyMCE.getParentElement(startBlock,"OL,UL",null,body)!=null)return false;if((startBlock!=null&&startBlock.nodeName=="TABLE")||(endBlock!=null&&endBlock.nodeName=="TABLE"))startBlock=endBlock=null;paraBefore=(startBlock!=null&&startBlock.nodeName==blockName)?startBlock.cloneNode(false):doc.createElement(blockName);paraAfter=(endBlock!=null&&endBlock.nodeName==blockName)?endBlock.cloneNode(false):doc.createElement(blockName);if(/^(H[1-6])$/.test(blockName))paraAfter=doc.createElement("p");startChop=startNode;endChop=endNode;node=startChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;startChop=node}while((node=node.previousSibling?node.previousSibling:node.parentNode));node=endChop;do{if(node==body||node.nodeType==9||tinyMCE.isBlockElement(node))break;endChop=node}while((node=node.nextSibling?node.nextSibling:node.parentNode));if(startChop.nodeName=="TD")startChop=startChop.firstChild;if(endChop.nodeName=="TD")endChop=endChop.lastChild;if(startBlock==null){rng.deleteContents();if(!tinyMCE.isSafari)sel.removeAllRanges();if(startChop!=rootElm&&endChop!=rootElm){rngBefore=rng.cloneRange();if(startChop==body)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);paraBefore.appendChild(rngBefore.cloneContents());if(endChop.parentNode.nodeName==blockName)endChop=endChop.parentNode;rng.setEndAfter(endChop);if(endChop.nodeName!="#text"&&endChop.nodeName!="BODY")rngBefore.setEndAfter(endChop);contents=rng.cloneContents();if(contents.firstChild&&(contents.firstChild.nodeName==blockName||contents.firstChild.nodeName=="BODY"))paraAfter.innerHTML=contents.firstChild.innerHTML;else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML="&nbsp;";if(isEmpty(paraAfter))paraAfter.innerHTML="&nbsp;";rng.deleteContents();rngAfter.deleteContents();rngBefore.deleteContents();if(tinyMCE.isOpera){paraBefore.normalize();rngBefore.insertNode(paraBefore);paraAfter.normalize();rngBefore.insertNode(paraAfter)}else{paraAfter.normalize();rngBefore.insertNode(paraAfter);paraBefore.normalize();rngBefore.insertNode(paraBefore)}}else{body.innerHTML="<"+blockName+">&nbsp;</"+blockName+"><"+blockName+">&nbsp;</"+blockName+">";paraAfter=body.childNodes[1]}inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){paraAfter.innerHTML=contents.firstChild.innerHTML}else paraAfter.appendChild(contents);if(isEmpty(paraBefore))paraBefore.innerHTML="&nbsp;";if(isEmpty(paraAfter))paraAfter.innerHTML="&nbsp;";rng=doc.createRange();if(!startChop.previousSibling&&startChop.parentNode.nodeName.toUpperCase()==blockName){rng.setStartBefore(startChop.parentNode)}else{if(rngBefore.startContainer.nodeName.toUpperCase()==blockName&&rngBefore.startOffset==0)rng.setStartBefore(rngBefore.startContainer);else rng.setStart(rngBefore.startContainer,rngBefore.startOffset)}if(!endChop.nextSibling&&endChop.parentNode.nodeName.toUpperCase()==blockName)rng.setEndAfter(endChop.parentNode);else rng.setEnd(rngAfter.endContainer,rngAfter.endOffset);rng.deleteContents();if(tinyMCE.isOpera){rng.insertNode(paraBefore);rng.insertNode(paraAfter)}else{rng.insertNode(paraAfter);rng.insertNode(paraBefore)}paraAfter.normalize();paraBefore.normalize();inst.selection.moveToBookmark(b);inst.selection.selectNode(paraAfter,true,true);return true},_handleBackSpace:function(inst){var r=inst.getRng(),sn=r.startContainer,nv,s=false;if(sn&&sn.nextSibling&&sn.nextSibling.nodeName=="BR"&&sn.parentNode.nodeName!="BODY"){nv=sn.nodeValue;if(nv!=null&&r.startOffset==nv.length)sn.nextSibling.parentNode.removeChild(sn.nextSibling)}if(inst.settings.auto_resize)inst.resizeToContent();return s}};function TinyMCE_Layer(id,bm){this.id=id;this.blockerElement=null;this.events=false;this.element=null;this.blockMode=typeof(bm)!='undefined'?bm:true;this.doc=document};TinyMCE_Layer.prototype={moveRelativeTo:function(re,p){var rep=this.getAbsPosition(re),e=this.getElement(),x,y;var w=parseInt(re.offsetWidth),h=parseInt(re.offsetHeight);var ew=parseInt(e.offsetWidth),eh=parseInt(e.offsetHeight);switch(p){case"tl":x=rep.absLeft;y=rep.absTop;break;case"tr":x=rep.absLeft+w;y=rep.absTop;break;case"bl":x=rep.absLeft;y=rep.absTop+h;break;case"br":x=rep.absLeft+w;y=rep.absTop+h;break;case"cc":x=rep.absLeft+(w/ 2) - (ew /2);y=rep.absTop+(h/ 2) - (eh /2);break}this.moveTo(x,y)},moveBy:function(x,y){var e=this.getElement();this.moveTo(parseInt(e.style.left)+x,parseInt(e.style.top)+y)},moveTo:function(x,y){var e=this.getElement();e.style.left=x+"px";e.style.top=y+"px";this.updateBlocker()},resizeBy:function(w,h){var e=this.getElement();this.resizeTo(parseInt(e.style.width)+w,parseInt(e.style.height)+h)},resizeTo:function(w,h){var e=this.getElement();if(w!=null)e.style.width=w+"px";if(h!=null)e.style.height=h+"px";this.updateBlocker()},show:function(){var el=this.getElement();if(el){el.style.display='block';this.updateBlocker()}},hide:function(){var el=this.getElement();if(el){el.style.display='none';this.updateBlocker()}},isVisible:function(){return this.getElement().style.display=='block'},getElement:function(){if(!this.element)this.element=this.doc.getElementById(this.id);return this.element},setBlockMode:function(s){this.blockMode=s},updateBlocker:function(){var e,b,x,y,w,h;b=this.getBlocker();if(b){if(this.blockMode){e=this.getElement();x=this.parseInt(e.style.left);y=this.parseInt(e.style.top);w=this.parseInt(e.offsetWidth);h=this.parseInt(e.offsetHeight);b.style.left=x+'px';b.style.top=y+'px';b.style.width=w+'px';b.style.height=h+'px';b.style.display=e.style.display}else b.style.display='none'}},getBlocker:function(){var d,b;if(!this.blockerElement&&this.blockMode){d=this.doc;b=d.getElementById(this.id+"_blocker");if(!b){b=d.createElement("iframe");b.setAttribute('id',this.id+"_blocker");b.style.cssText='display: none; position: absolute; left: 0; top: 0';b.src='javascript:false;';b.frameBorder='0';b.scrolling='no';d.body.appendChild(b)}this.blockerElement=b}return this.blockerElement},getAbsPosition:function(n){var p={absLeft:0,absTop:0};while(n){p.absLeft+=n.offsetLeft;p.absTop+=n.offsetTop;n=n.offsetParent}return p},create:function(n,c,p,h){var d=this.doc,e=d.createElement(n);e.setAttribute('id',this.id);if(c)e.className=c;if(!p)p=d.body;if(h)e.innerHTML=h;p.appendChild(e);return this.element=e},exists:function(){return this.doc.getElementById(this.id)!=null},parseInt:function(s){if(s==null||s=='')return 0;return parseInt(s)},remove:function(){var e=this.getElement(),b=this.getBlocker();if(e)e.parentNode.removeChild(e);if(b)b.parentNode.removeChild(b)}};function TinyMCE_Menu(){var id;if(typeof(tinyMCE.menuCounter)=="undefined")tinyMCE.menuCounter=0;id="mc_menu_"+tinyMCE.menuCounter++;TinyMCE_Layer.call(this,id,true);this.id=id;this.items=[];this.needsUpdate=true};TinyMCE_Menu.prototype=tinyMCE.extend(TinyMCE_Layer.prototype,{init:function(s){var n;this.settings={separator_class:'mceMenuSeparator',title_class:'mceMenuTitle',disabled_class:'mceMenuDisabled',menu_class:'mceMenu',drop_menu:true};for(n in s)this.settings[n]=s[n];this.create('div',this.settings.menu_class)},clear:function(){this.items=[]},addTitle:function(t){this.add({type:'title',text:t})},addDisabled:function(t){this.add({type:'disabled',text:t})},addSeparator:function(){this.add({type:'separator'})},addItem:function(t,js){this.add({text:t,js:js})},add:function(mi){this.items[this.items.length]=mi;this.needsUpdate=true},update:function(){var e=this.getElement(),h='',i,t,m=this.items,s=this.settings;if(this.settings.drop_menu)h+='<span class="mceMenuLine"></span>';h+='<table border="0" cellpadding="0" cellspacing="0">';for(i=0;i<m.length;i++){t=tinyMCE.xmlEncode(m[i].text);c=m[i].class_name?' class="'+m[i].class_name+'"':'';switch(m[i].type){case'separator':h+='<tr class="'+s.separator_class+'"><td>';break;case'title':h+='<tr class="'+s.title_class+'"><td><span'+c+'>'+t+'</span>';break;case'disabled':h+='<tr class="'+s.disabled_class+'"><td><span'+c+'>'+t+'</span>';break;default:h+='<tr><td><a href="'+tinyMCE.xmlEncode(m[i].js)+'" onmousedown="'+tinyMCE.xmlEncode(m[i].js)+';return tinyMCE.cancelEvent(event);" onclick="return tinyMCE.cancelEvent(event);" onmouseup="return tinyMCE.cancelEvent(event);"><span'+c+'>'+t+'</span></a>'}h+='</td></tr>'}h+='</table>';e.innerHTML=h;this.needsUpdate=false;this.updateBlocker()},show:function(){var nl,i;if(tinyMCE.lastMenu==this)return;if(this.needsUpdate)this.update();if(tinyMCE.lastMenu&&tinyMCE.lastMenu!=this)tinyMCE.lastMenu.hide();TinyMCE_Layer.prototype.show.call(this);if(!tinyMCE.isOpera){}tinyMCE.lastMenu=this}});tinyMCE.add(TinyMCE_Engine,{debug:function(){var m="",a,i,l=tinyMCE.log.length;for(i=0,a=this.debug.arguments;i<a.length;i++){m+=a[i];if(i<a.length-1)m+=', '}if(l<1000)tinyMCE.log[l]="[debug] "+m}});
var tinymce={majorVersion:'3',minorVersion:'0.6.2',releaseDate:'2008-04-07',_init:function(){var t=this,ua=navigator.userAgent,i,nl,n,base;t.isOpera=window.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!window.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(navigator.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;if(window.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;return;}t.suffix='';nl=document.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(nl[i].href)base=nl[i].href;}function getBase(n){if(n.src&&/tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)){if(/_(src|dev)\.js/g.test(n.src))t.suffix='_src';t.baseURL=n.src.substring(0,n.src.lastIndexOf('/'));if(base&&t.baseURL.indexOf('://')==-1)t.baseURL=base+t.baseURL;return t.baseURL;}return null;};nl=document.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}n=document.getElementsByTagName('head')[0];if(n){nl=n.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}}return;},is:function(o,t){var n=typeof(o);if(!t)return n!='undefined';if(t=='array'&&(o instanceof Array))return true;return n==t;},each:function(o,cb,s){var n,l;if(!o)return 0;s=s||o;if(typeof(o.length)!='undefined'){for(n=0,l=o.length;n<l;n++){if(cb.call(s,o[n],n,o)===false)return 0;}}else{for(n in o){if(o.hasOwnProperty(n)){if(cb.call(s,o[n],n,o)===false)return 0;}}}return 1;},map:function(a,f){var o=[];tinymce.each(a,function(v){o.push(f(v));});return o;},grep:function(a,f){var o=[];tinymce.each(a,function(v){if(!f||f(v))o.push(v);});return o;},inArray:function(a,v){var i,l;if(a){for(i=0,l=a.length;i<l;i++){if(a[i]===v)return i;}}return-1;},extend:function(o,e){var i,a=arguments;for(i=1;i<a.length;i++){e=a[i];tinymce.each(e,function(v,n){if(typeof(v)!=='undefined')o[n]=v;});}return o;},trim:function(s){return(s?''+s:'').replace(/^\s*|\s*$/g,'');},create:function(s,p){var t=this,sp,ns,cn,scn,c,de=0;s=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);cn=s[3].match(/(^|\.)(\w+)$/i)[2];ns=t.createNS(s[3].replace(/\.\w+$/,''));if(ns[cn])return;if(s[2]=='static'){ns[cn]=p;if(this.onCreate)this.onCreate(s[2],s[3],ns[cn]);return;}if(!p[cn]){p[cn]=function(){};de=1;}ns[cn]=p[cn];t.extend(ns[cn].prototype,p);if(s[5]){sp=t.resolve(s[5]).prototype;scn=s[5].match(/\.(\w+)$/i)[1];c=ns[cn];if(de){ns[cn]=function(){return sp[scn].apply(this,arguments);};}else{ns[cn]=function(){this.parent=sp[scn];return c.apply(this,arguments);};}ns[cn].prototype[cn]=ns[cn];t.each(sp,function(f,n){ns[cn].prototype[n]=sp[n];});t.each(p,function(f,n){if(sp[n]){ns[cn].prototype[n]=function(){this.parent=sp[n];return f.apply(this,arguments);};}else{if(n!=cn)ns[cn].prototype[n]=f;}});}t.each(p['static'],function(f,n){ns[cn][n]=f;});if(this.onCreate)this.onCreate(s[2],s[3],ns[cn].prototype);},walk:function(o,f,n,s){s=s||this;if(o){if(n)o=o[n];tinymce.each(o,function(o,i){if(f.call(s,o,i,n)===false)return false;tinymce.walk(o,f,n,s);});}},createNS:function(n,o){var i,v;o=o||window;n=n.split('.');for(i=0;i<n.length;i++){v=n[i];if(!o[v])o[v]={};o=o[v];}return o;},resolve:function(n,o){var i,l;o=o||window;n=n.split('.');for(i=0,l=n.length;i<l;i++){o=o[n[i]];if(!o)break;}return o;},addUnload:function(f,s){var t=this,w=window,unload;f={func:f,scope:s||this};if(!t.unloads){unload=function(){var li=t.unloads,o,n;for(n in li){o=li[n];if(o&&o.func)o.func.call(o.scope,1);}if(w.detachEvent)w.detachEvent('onunload',unload);else if(w.removeEventListener)w.removeEventListener('unload',unload,false);o=li=w=unload=null;if(window.CollectGarbage)window.CollectGarbage();};if(w.attachEvent)w.attachEvent('onunload',unload);else if(w.addEventListener)w.addEventListener('unload',unload,false);t.unloads=[f];}else t.unloads.push(f);return f;},removeUnload:function(f){var u=this.unloads,r=null;tinymce.each(u,function(o,i){if(o&&o.func==f){u.splice(i,1);r=f;return false;}});return r;},explode:function(s,d){return tinymce.map(s.split(d||','),tinymce.trim);}};window.tinymce=tinymce;tinymce._init();tinymce.create('tinymce.util.Dispatcher',{scope:null,listeners:null,Dispatcher:function(s){this.scope=s||this;this.listeners=[];},add:function(cb,s){this.listeners.push({cb:cb,scope:s||this.scope});return cb;},addToTop:function(cb,s){this.listeners.unshift({cb:cb,scope:s||this.scope});return cb;},remove:function(cb){var l=this.listeners,o=null;tinymce.each(l,function(c,i){if(cb==c.cb){o=cb;l.splice(i,1);return false;}});return o;},dispatch:function(){var s,a=arguments,i,li=this.listeners,c;for(i=0;i<li.length;i++){c=li[i];s=c.cb.apply(c.scope,a);if(s===false)break;}return s;}});(function(){var each=tinymce.each;tinymce.create('tinymce.util.URI',{URI:function(u,s){var t=this,o,a,b;s=t.settings=s||{};if(/^(mailto|news|javascript|about):/i.test(u)||/^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf('://')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(v,i){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}},setPath:function(p){var t=this;p=/^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;u=new tinymce.util.URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new tinymce.util.URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0;i<base.length;i++){if(i>=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length<items.length){for(i=0;i<items.length;i++){if(i>=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0;i<base.length-(bp-1);i++)out+="../";for(i=bp-1;i<items.length;i++){if(i!=bp-1)out+="/"+items[i];else out+=items[i];}return out;},toAbsPath:function(base,path){var i,nb=0,o=[];base=base.split('/');path=path.split('/');each(base,function(k){if(k)o.push(k);});base=o;for(i=path.length-1,o=[];i>=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return'/'+o.reverse().join('/');return'/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});})();(function(){var each=tinymce.each;tinymce.create('static tinymce.util.Cookie',{getHash:function(n){var v=this.get(n),h;if(v){each(v.split('&'),function(v){v=v.split('=');h=h||{};h[unescape(v[0])]=unescape(v[1]);});}return h;},setHash:function(n,v,e,p,d,s){var o='';each(v,function(v,k){o+=(!o?'':'&')+escape(k)+'='+escape(v);});this.set(n,o,e,p,d,s);},get:function(n){var c=document.cookie,e,p=n+"=",b;if(!c)return;b=c.indexOf("; "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return null;}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e));},set:function(n,v,e,p,d,s){document.cookie=n+"="+escape(v)+((e)?"; expires="+e.toGMTString():"")+((p)?"; path="+escape(p):"")+((d)?"; domain="+d:"")+((s)?"; secure":"");},remove:function(n,p){var d=new Date();d.setTime(d.getTime()-1000);this.set(n,'',d,p,d);}});})();tinymce.create('static tinymce.util.JSON',{serialize:function(o){var i,v,s=tinymce.util.JSON.serialize,t;if(o==null)return'null';t=typeof o;if(t=='string'){v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"\'])/g,function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a;})+'"';}if(t=='object'){if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']';}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}';}return''+o;},parse:function(s){try{return eval('('+s+')');}catch(ex){}}});tinymce.create('static tinymce.util.XHR',{send:function(o){var x,t,w=window,c=0;o.scope=o.scope||this;o.success_scope=o.success_scope||o.scope;o.error_scope=o.error_scope||o.scope;o.async=o.async===false?false:true;o.data=o.data||'';function get(s){x=0;try{x=new ActiveXObject(s);}catch(ex){}return x;};x=w.XMLHttpRequest?new XMLHttpRequest():get('Microsoft.XMLHTTP')||get('Msxml2.XMLHTTP');if(x){if(x.overrideMimeType)x.overrideMimeType(o.content_type);x.open(o.type||(o.data?'POST':'GET'),o.url,o.async);if(o.content_type)x.setRequestHeader('Content-Type',o.content_type);x.send(o.data);t=w.setInterval(function(){if(x.readyState==4||c++>10000){w.clearInterval(t);if(o.success&&c<10000&&x.status==200)o.success.call(o.success_scope,''+x.responseText,x,o);else if(o.error)o.error.call(o.error_scope,c>10000?'TIMED_OUT':'GENERAL',x,o);x=null;}},10);}}});(function(){var extend=tinymce.extend,JSON=tinymce.util.JSON,XHR=tinymce.util.XHR;tinymce.create('tinymce.util.JSONRequest',{JSONRequest:function(s){this.settings=extend({},s);this.count=0;},send:function(o){var ecb=o.error,scb=o.success;o=extend(this.settings,o);o.success=function(c,x){c=JSON.parse(c);if(typeof(c)=='undefined'){c={error:'JSON Parse error.'};}if(c.error)ecb.call(o.error_scope||o.scope,c.error,x);else scb.call(o.success_scope||o.scope,c.result);};o.error=function(ty,x){ecb.call(o.error_scope||o.scope,ty,x);};o.data=JSON.serialize({id:o.id||'c'+(this.count++),method:o.method,params:o.params});o.content_type='application/json';XHR.send(o);},'static':{sendRPC:function(o){return new tinymce.util.JSONRequest().send(o);}}});}());(function(){var each=tinymce.each,is=tinymce.is;var isWebKit=tinymce.isWebKit,isIE=tinymce.isIE;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,listeners:{},pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,cache:{},idPattern:/^#[\w]+$/,elmPattern:/^[\w_*]+$/,elmClassPattern:/^([\w_]*)\.([\w_]+)$/,DOMUtils:function(d,s){var t=this;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat";t.stdMode=d.documentMode===8;this.settings=s=tinymce.extend({keep_values:false,hex_colors:1,process_html:1},s);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}}tinymce.addUnload(t.destroy,t);},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,w,h;e=t.get(e);p=t.getPos(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1)w=0;if(h.indexOf('px')===-1)h=0;return{x:p.x,y:p.y,w:parseInt(w)||e.offsetWidth||e.clientWidth,h:parseInt(h)||e.offsetHeight||e.clientHeight};},getParent:function(n,f,r){var na,se=this.settings;n=this.get(n);if(se.strict_root)r=r||this.getRoot();if(is(f,'string')){na=f.toUpperCase();f=function(n){var s=false;if(n.nodeType==1&&na==='*'){s=true;return false;}each(na.split(','),function(v){if(n.nodeType==1&&((se.strict&&n.nodeName.toUpperCase()==v)||n.nodeName==v)){s=true;return false;}});return s;};}while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode;}return null;},get:function(e){var n;if(this.doc&&typeof(e)=='string'){n=e;e=this.doc.getElementById(e);if(e&&e.id!==n)return this.doc.getElementsByName(n)[1];}return e;},select:function(pa,s){var t=this,cs,c,pl,o=[],x,i,l,n;s=t.get(s)||t.doc;if(s.querySelectorAll){if(s!=t.doc){i=s.id;s.id='_mc_tmp';pa='#_mc_tmp '+pa;}l=tinymce.grep(s.querySelectorAll(pa));s.id=i;return l;}if(t.settings.strict){function get(s,n){return s.getElementsByTagName(n.toLowerCase());};}else{function get(s,n){return s.getElementsByTagName(n);};}if(t.elmPattern.test(pa)){x=get(s,pa);for(i=0,l=x.length;i<l;i++)o.push(x[i]);return o;}if(t.elmClassPattern.test(pa)){pl=t.elmClassPattern.exec(pa);x=get(s,pl[1]||'*');c=' '+pl[2]+' ';for(i=0,l=x.length;i<l;i++){n=x[i];if(n.className&&(' '+n.className+' ').indexOf(c)!==-1)o.push(n);}return o;}function collect(n){if(!n.mce_save){n.mce_save=1;o.push(n);}};function collectIE(n){if(!n.getAttribute('mce_save')){n.setAttribute('mce_save','1');o.push(n);}};function find(n,f,r){var i,l,nl=get(r,n);for(i=0,l=nl.length;i<l;i++)f(nl[i]);};each(pa.split(','),function(v,i){v=tinymce.trim(v);if(t.elmPattern.test(v)){each(get(s,v),function(n){collect(n);});return;}if(t.elmClassPattern.test(v)){x=t.elmClassPattern.exec(v);each(get(s,x[1]),function(n){if(t.hasClass(n,x[2]))collect(n);});return;}if(!(cs=t.cache[pa])){cs='x=(function(cf, s) {';pl=v.split(' ');each(pl,function(v){var p=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i.exec(v);p[1]=p[1]||'*';cs+='find("'+p[1]+'", function(n) {';if(p[2])cs+='if (n.id !== "'+p[2]+'") return;';if(p[3]){cs+='var c = " " + n.className + " ";';cs+='if (';c='';each(p[3].split('.'),function(v){if(v)c+=(c?'||':'')+'c.indexOf(" '+v+' ") === -1';});cs+=c+') return;';}});cs+='cf(n);';for(i=pl.length-1;i>=0;i--)cs+='}, '+(i?'n':'s')+');';cs+='})';t.cache[pa]=cs=eval(cs);}cs(isIE?collectIE:collect,s);});each(o,function(n){if(isIE)n.removeAttribute('mce_save');else delete n.mce_save;});return o;},add:function(p,n,a,h,c){var t=this;return this.run(p,function(p){var e,k;e=is(n,'string')?t.doc.createElement(n):n;if(a){for(k in a){if(a.hasOwnProperty(k)&&!is(a[k],'object'))t.setAttrib(e,k,''+a[k]);}if(a.style&&!is(a.style,'string')){each(a.style,function(v,n){t.setStyle(e,n,v);});}}if(h){if(h.nodeType)e.appendChild(h);else t.setHTML(e,h);}return!c?p.appendChild(e):e;});},create:function(n,a,h){return this.add(this.doc.createElement(n),n,a,h,1);},createHTML:function(n,a,h){var o='',t=this,k;o+='<'+n;for(k in a){if(a.hasOwnProperty(k))o+=' '+k+'="'+t.encode(a[k])+'"';}if(tinymce.is(h))return o+'>'+h+'</'+n+'>';return o+' />';},remove:function(n,k){return this.run(n,function(n){var p,g;p=n.parentNode;if(!p)return null;if(k){each(n.childNodes,function(c){p.insertBefore(c.cloneNode(true),n);});}return p.removeChild(n);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v)))v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout)s.display='inline-block';}s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';}if(t.settings.update_styles)t.setAttrib(e,'mce_style');});},getStyle:function(n,na,c){n=this.get(n);if(!n)return false;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(na=='float')na=isIE?'styleFloat':'cssFloat';if(n.currentStyle&&c)return n.currentStyle[na];return n.style[na];},setStyles:function(e,o){var t=this,s=t.settings,ol;ol=s.update_styles;s.update_styles=0;each(o,function(v,n){t.setStyle(e,n,v);});s.update_styles=ol;if(s.update_styles)t.setAttrib(e,s.cssText);},setAttrib:function(e,n,v){var t=this;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(s.keep_values){if(v)e.setAttribute('mce_style',v,2);else e.removeAttribute('mce_style',2);}e.style.cssText=v;break;case"class":e.className=v||'';break;case"src":case"href":if(s.keep_values){if(s.url_converter)v=s.url_converter.call(s.url_converter_scope||t,v,n,e);t.setAttrib(e,'mce_'+n,v,2);}break;}if(is(v)&&v!==null&&v.length!==0)e.setAttribute(n,''+v,2);else e.removeAttribute(n,2);});},setAttribs:function(e,o){var t=this;return this.run(e,function(e){each(o,function(v,n){t.setAttrib(e,n,v);});});},getAttrib:function(e,n,dv){var v,t=this;e=t.get(e);if(!e)return false;if(!is(dv))dv="";if(/^(src|href|style|coords)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}v=e.getAttribute(n,2);if(!v){switch(n){case'class':v=e.className;break;default:if(isIE&&n==='name'&&e.nodeName==='A'){v=e.name;break;}v=e.attributes[n];v=v&&is(v.nodeValue)?v.nodeValue:v;}}switch(n){case'style':v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values)e.setAttribute('mce_style',v);}break;}if(isWebKit&&n==="class"&&v)v=v.replace(/(apple|webkit)\-[a-z\-]+/gi,'');if(isIE){switch(n){case'rowspan':case'colspan':if(v===1)v='';break;case'size':if(v==='+0')v='';break;case'hspace':if(v===-1)v='';break;case'tabindex':if(v===32768)v='';break;case'shape':v=v.toLowerCase();break;default:if(n.indexOf('on')===0&&v)v=(''+v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/,'$1');}}return(v&&v!='')?''+v:dv;},getPos:function(n){var t=this,x=0,y=0,e,d=t.doc,r;n=t.get(n);if(n&&isIE){n=n.getBoundingClientRect();e=t.boxModel?d.documentElement:d.body;x=t.getStyle(t.select('html')[0],'borderWidth');x=(x=='medium'||t.boxModel&&!t.isIE6)&&2||x;n.top+=t.win.self!=t.win.top?2:0;return{x:n.left+e.scrollLeft-x,y:n.top+e.scrollTop-x};}r=n;while(r){x+=r.offsetLeft||0;y+=r.offsetTop||0;r=r.offsetParent;}r=n;while(r){if(!/^table-row|inline.*/i.test(t.getStyle(r,"display",1))){x-=r.scrollLeft||0;y-=r.scrollTop||0;}r=r.parentNode;if(r==d.body)break;}return{x:x,y:y};},parseStyle:function(st){var t=this,s=t.settings,o={};if(!st)return o;function compress(p,s,ot){var t,r,b,l;t=o[p+'-top'+s];if(!t)return;r=o[p+'-right'+s];if(t!=r)return;b=o[p+'-bottom'+s];if(r!=b)return;l=o[p+'-left'+s];if(b!=l)return;o[ot]=l;delete o[p+'-top'+s];delete o[p+'-right'+s];delete o[p+'-bottom'+s];delete o[p+'-left'+s];};function compress2(ta,a,b,c){var t;t=o[a];if(!t)return;t=o[b];if(!t)return;t=o[c];if(!t)return;o[ta]=o[a]+' '+o[b]+' '+o[c];delete o[a];delete o[b];delete o[c];};each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/url\([^\)]+\)/g,function(v){ur.push(v);return'url('+ur.length+')';});v=v.split(':');sv=tinymce.trim(v[1]);sv=sv.replace(/url\(([^\)]+)\)/g,function(a,b){return ur[parseInt(b)-1];});sv=sv.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});if(s.url_converter){sv=sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),'style',null))+')';});}o[tinymce.trim(v[0]).toLowerCase()]=sv;}});compress("border","","border");compress("border","-width","border-width");compress("border","-color","border-color");compress("border","-style","border-style");compress("padding","","padding");compress("margin","","margin");compress2('border','border-width','border-style','border-color');if(isIE){if(o.border=='medium none')o.border='';}return o;},serializeStyle:function(o){var s='';each(o,function(v,k){if(k&&v){switch(k){case'color':case'background-color':v=v.toLowerCase();break;}s+=(s?' ':'')+k+': '+v+';';}});return s;},loadCSS:function(u){var t=this,d=t.doc;if(!u)u='';each(u.split(','),function(u){if(t.files[u])return;t.files[u]=true;t.add(t.select('head')[0],'link',{rel:'stylesheet',href:u});});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c)return 0;if(this.hasClass(e,c))return e.className;o=this.removeClass(e,c);return e.className=(o!=''?(o+' '):'')+c;});},removeClass:function(e,c){var t=this,re;return t.run(e,function(e){var v;if(t.hasClass(e,c)){if(!re)re=new RegExp("(^|\\s+)"+c+"(\\s+|$)","g");v=e.className.replace(re,' ');return e.className=tinymce.trim(v!=' '?v:'');}return e.className;});},hasClass:function(n,c){n=this.get(n);if(!n||!c)return false;return(' '+n.className+' ').indexOf(' '+c+' ')!==-1;},show:function(e){return this.setStyle(e,'display','block');},hide:function(e){return this.setStyle(e,'display','none');},isHidden:function(e){e=this.get(e);return e.style.display=='none'||this.getStyle(e,'display')=='none';},uniqueId:function(p){return(!p?'mce_':p)+(this.counter++);},setHTML:function(e,h){var t=this;return this.run(e,function(e){var x,i,nl,n,p,x;h=t.processHTML(h);if(isIE){function set(){try{e.innerHTML='<br />'+h;e.removeChild(e.firstChild);}catch(ex){while(e.firstChild)e.firstChild.removeNode();x=t.create('div');x.innerHTML='<br />'+h;each(x.childNodes,function(n,i){if(i)e.appendChild(n);});}};if(t.settings.fix_ie_paragraphs)h=h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true">&nbsp;</p>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("p");for(i=nl.length-1,x=0;i>=0;i--){n=nl[i];if(!n.hasChildNodes()){if(!n.mce_keep){x=1;break;}n.removeAttribute('mce_keep');}}}if(x){h=h.replace(/<p([^>]+)>|<p>/g,'<div$1 mce_tmp="1">');h=h.replace(/<\/p>/g,'</div>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("DIV");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.mce_tmp){p=t.doc.createElement('p');n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(a,b){var v;if(b!=='mce_tmp'){v=n.getAttribute(b);if(!v&&b==='class')v=n.className;p.setAttribute(b,v);}});for(x=0;x<n.childNodes.length;x++)p.appendChild(n.childNodes[x].cloneNode(true));n.swapNode(p);}}}}}else e.innerHTML=h;return h;});},processHTML:function(h){var t=this,s=t.settings;if(!s.process_html)return h;if(tinymce.isGecko){h=h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,'<$1b$2>');h=h.replace(/<(\/?)em>|<em( [^>]+)>/gi,'<$1i$2>');}h=h.replace(/<a( )([^>]+)\/>|<a\/>/gi,'<a$1$2></a>');if(s.keep_values){if(h.indexOf('<script')!==-1){h=h.replace(/<script>/g,'<script type="text/javascript">');h=h.replace(/<script(|[^>]+)>(\s*<!--|\/\/\s*<\[CDATA\[)?[\r\n]*/g,'<mce:script$1><!--\n');h=h.replace(/\s*(\/\/\s*-->|\/\/\s*]]>)?<\/script>/g,'\n// --></mce:script>');h=h.replace(/<mce:script(|[^>]+)><!--\n\/\/ --><\/mce:script>/g,'<mce:script$1></mce:script>');}h=h.replace(/<([\w:]+) [^>]*(src|href|style|coords)[^>]*>/gi,function(a,n){function handle(m,b,c){var u=c;if(a.indexOf('mce_'+b)!=-1)return m;if(b=='style'){if(s.hex_colors){u=u.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});}if(s.url_converter){u=u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n))+')';});}}else if(b!='coords'){if(s.url_converter)u=t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n));}return' '+b+'="'+c+'" mce_'+b+'="'+u+'"';};a=a.replace(/ (src|href|style|coords)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords)=([^\s\"\'>]+)/gi,handle);});}return h;},getOuterHTML:function(e){var d;e=this.get(e);if(!e)return null;if(isIE)return e.outerHTML;d=(e.ownerDocument||this.doc).createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML;},setOuterHTML:function(e,h,d){var t=this;return this.run(e,function(e){var n,tp;e=t.get(e);d=d||e.ownerDocument||t.doc;if(isIE&&e.nodeType==1)e.outerHTML=h;else{tp=d.createElement("body");tp.innerHTML=h;n=tp.lastChild;while(n){t.insertAfter(n.cloneNode(true),e);n=n.previousSibling;}t.remove(e);}});},decode:function(s){var e;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;return!e.firstChild?s:e.firstChild.nodeValue;}return s;},encode:function(s){return s?(''+s).replace(/[<>&\"]/g,function(c,b){switch(c){case'&':return'&amp;';case'"':return'&quot;';case'<':return'&lt;';case'>':return'&gt;';}return c;}):s;},insertAfter:function(n,r){var t=this;r=t.get(r);return this.run(n,function(n){var p,ns;p=r.parentNode;ns=r.nextSibling;if(ns)p.insertBefore(n,ns);else p.appendChild(n);return n;});},isBlock:function(n){if(n.nodeType&&n.nodeType!==1)return false;n=n.nodeName||n;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);},replace:function(n,o,k){if(is(o,'array'))n=n.cloneNode(true);return this.run(o,function(o){if(k){each(o.childNodes,function(c){n.appendChild(c.cloneNode(true));});}if(isIE&&o.nodeType===1){o.parentNode.insertBefore(n,o);o.outerHTML='';return n;}return o.parentNode.replaceChild(n,o);});},toHex:function(s){var c=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);function hex(s){s=parseInt(s).toString(16);return s.length>1?s:'0'+s;};if(c){s='#'+hex(c[1])+hex(c[2])+hex(c[3]);return s;}return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_filter,ov;if(t.classes)return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v))return;ov=v;v=v.replace(/.*\.([a-z0-9_\-]+).*/i,'$1');if(f&&!(v=f(v,ov)))return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});}break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){}if(cl.length>0)t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string')e=t.doc.getElementById(e);if(!e)return false;s=s||this;if(!e.nodeType&&(e.length||e.length===0)){o=[];each(e,function(e,i){if(e){if(typeof(e)=='string')e=t.doc.getElementById(e);o.push(f.call(s,e,i));}});return o;}return f.call(s,e);},getAttribs:function(n){var o;n=this.get(n);if(!n)return[];if(isIE){o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;}return n.attributes;},destroy:function(s){var t=this;t.win=t.doc=t.root=null;if(!s)tinymce.removeUnload(t.destroy);}});tinymce.DOM=new tinymce.dom.DOMUtils(document,{process_html:0});})();(function(){var each=tinymce.each,DOM=tinymce.DOM,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit,Event;tinymce.create('static tinymce.dom.Event',{inits:[],events:[],add:function(o,n,f,s){var cb,t=this,el=t.events,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.add(o,n,f,s));});return r;}o=DOM.get(o);if(!o)return;cb=function(e){e=e||window.event;if(e&&!e.target&&isIE)e.target=e.srcElement;if(!s)return f(e);return f.call(s,e);};if(n=='unload'){tinymce.unloads.unshift({func:cb});return cb;}if(n=='init'){if(t.domLoaded)cb();else t.inits.push(cb);return cb;}el.push({obj:o,name:n,func:f,cfunc:cb,scope:s});t._add(o,n,cb);return f;},remove:function(o,n,f){var t=this,a=t.events,s=false,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.remove(o,n,f));});return r;}o=DOM.get(o);each(a,function(e,i){if(e.obj==o&&e.name==n&&(!f||(e.func==f||e.cfunc==f))){a.splice(i,1);t._remove(o,n,e.cfunc);s=true;return false;}});return s;},clear:function(o){var t=this,a=t.events,i,e;if(o){o=DOM.get(o);for(i=a.length-1;i>=0;i--){e=a[i];if(e.obj===o){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;a.splice(i,1);}}}},cancel:function(e){if(!e)return false;this.stop(e);return this.prevent(e);},stop:function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;},prevent:function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;},_unload:function(){var t=Event;each(t.events,function(e,i){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;});t.events=[];t=null;},_add:function(o,n,f){if(o.attachEvent)o.attachEvent('on'+n,f);else if(o.addEventListener)o.addEventListener(n,f,false);else o['on'+n]=f;},_remove:function(o,n,f){if(o){try{if(o.detachEvent)o.detachEvent('on'+n,f);else if(o.removeEventListener)o.removeEventListener(n,f,false);else o['on'+n]=null;}catch(ex){}}},_pageInit:function(){var e=Event;e._remove(window,'DOMContentLoaded',e._pageInit);e.domLoaded=true;each(e.inits,function(c){c();});e.inits=[];},_wait:function(){var t;if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded)return;if(isIE&&document.location.protocol!='https:'){document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');DOM.get("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){Event._pageInit();DOM.get("__ie_onload").onreadystatechange=null;}};}else{Event._add(window,'DOMContentLoaded',Event._pageInit,Event);if(isIE||isWebKit){t=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(t);Event._pageInit();}},10);}}}});Event=tinymce.dom.Event;Event._wait();tinymce.addUnload(Event._unload);})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.Element',{Element:function(id,s){var t=this,dom,el;s=s||{};t.id=id;t.dom=dom=s.dom||tinymce.DOM;t.settings=s;if(!tinymce.isIE)el=t.dom.get(t.id);each(['getPos','getRect','getParent','add','setStyle','getStyle','setStyles','setAttrib','setAttribs','getAttrib','addClass','removeClass','hasClass','getOuterHTML','setOuterHTML','remove','show','hide','isHidden','setHTML','get'],function(k){t[k]=function(){var a=arguments,o;if(tinymce.isOpera){a=[id];each(arguments,function(v){a.push(v);});}else Array.prototype.unshift.call(a,el||id);o=dom[k].apply(dom,a);t.update(k);return o;};});},on:function(n,f,s){return tinymce.dom.Event.add(this.id,n,f,s);},getXY:function(){return{x:parseInt(this.getStyle('left')),y:parseInt(this.getStyle('top'))};},getSize:function(){var n=this.dom.get(this.id);return{w:parseInt(this.getStyle('width')||n.clientWidth),h:parseInt(this.getStyle('height')||n.clientHeight)};},moveTo:function(x,y){this.setStyles({left:x,top:y});},moveBy:function(x,y){var p=this.getXY();this.moveTo(p.x+x,p.y+y);},resizeTo:function(w,h){this.setStyles({width:w,height:h});},resizeBy:function(w,h){var s=this.getSize();this.resizeTo(s.w+w,s.h+h);},update:function(k){var t=this,b,dom=t.dom;if(tinymce.isIE6&&t.settings.blocker){k=k||'';if(k.indexOf('get')===0||k.indexOf('has')===0||k.indexOf('is')===0)return;if(k=='remove'){dom.remove(t.blocker);return;}if(!t.blocker){t.blocker=dom.uniqueId();b=dom.add(t.settings.container||dom.getRoot(),'iframe',{id:t.blocker,style:'position:absolute;',frameBorder:0,src:'javascript:""'});dom.setStyle(b,'opacity',0);}else b=dom.get(t.blocker);dom.setStyle(b,'left',t.getStyle('left',1));dom.setStyle(b,'top',t.getStyle('top',1));dom.setStyle(b,'width',t.getStyle('width',1));dom.setStyle(b,'height',t.getStyle('height',1));dom.setStyle(b,'display',t.getStyle('display',1));dom.setStyle(b,'zIndex',parseInt(t.getStyle('zIndex',1)||0)-1);}}});})();(function(){var is=tinymce.is,isIE=tinymce.isIE,each=tinymce.each;tinymce.create('tinymce.dom.Selection',{Selection:function(dom,win,serializer){var t=this;t.dom=dom;t.win=win;t.serializer=serializer;tinymce.addUnload(t.destroy,t);},getContent:function(s){var t=this,r=t.getRng(),e=t.dom.create("body"),se=t.getSel(),wb,wa,n;s=s||{};wb=wa='';s.get=true;s.format=s.format||'html';if(s.format=='text')return t.isCollapsed()?'':(r.text||(se.toString?se.toString():''));if(r.cloneContents){n=r.cloneContents();if(n)e.appendChild(n);}else if(is(r.item)||is(r.htmlText))e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();if(/^\s/.test(e.innerHTML))wb=' ';if(/\s+$/.test(e.innerHTML))wa=' ';s.getInner=true;return t.isCollapsed()?'':wb+t.serializer.serialize(e,s)+wa;},setContent:function(h,s){var t=this,r=t.getRng(),d;s=s||{format:'html'};s.set=true;h=t.dom.processHTML(h);if(r.insertNode){d=t.win.document;if(tinymce.isGecko&&h.indexOf('<')==-1){r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h+'<span id="__caret">_</span>'));t.select(t.dom.get('__caret'));t.getRng().deleteContents();return;}try{if(d.queryCommandEnabled('InsertHTML'))return d.execCommand('InsertHTML',false,h);}catch(ex){r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h));}}else{if(r.item)r.item(0).outerHTML=h;else r.pasteHTML(h);}},getStart:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(1);e=r.parentElement();if(e.nodeName=='BODY')return e.firstChild;return e;}else{e=r.startContainer;if(e.nodeName=='BODY')return e.firstChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getEnd:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(0);e=r.parentElement();if(e.nodeName=='BODY')return e.lastChild;return e;}else{e=r.endContainer;if(e.nodeName=='BODY')return e.lastChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getBookmark:function(si){var t=this,r=t.getRng(),tr,sx,sy,vp=t.dom.getViewPort(t.win),e,sp,bp,le,c=-0xFFFFFF,s,ro=t.dom.getRoot(),wb=0,wa=0,nv;sx=vp.x;sy=vp.y;if(si=='simple')return{rng:r,scrollX:sx,scrollY:sy};if(isIE){if(r.item){e=r.item(0);each(t.dom.select(e.nodeName),function(n,i){if(e==n){sp=i;return false;}});return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy};}tr=t.dom.doc.body.createTextRange();tr.moveToElementText(ro);tr.collapse(true);bp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(true);sp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(false);le=Math.abs(tr.move('character',c))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy};}e=t.getNode();s=t.getSel();if(!s)return null;if(e&&e.nodeName=='IMG'){return{scrollX:sx,scrollY:sy};}function getPos(r,sn,en){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d;}p+=tinymce.trim(n.nodeValue||'').length;}return null;};if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=getPos(ro,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};(s.anchorNode.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});return{start:Math.max(e.start+s.anchorOffset-wb,0),end:Math.max(e.end+s.focusOffset-wb,0),scrollX:sx,scrollY:sy,beg:s.anchorOffset-wb==0};}else{e=getPos(ro,r.startContainer,r.endContainer);(r.startContainer.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});(r.endContainer.nodeValue||'').replace(/^\s+/,function(a){wa=a.length;});if(!e)return{scrollX:sx,scrollY:sy};return{start:Math.max(e.start+r.startOffset-wb,0),end:Math.max(e.end+r.endOffset-wa,0),scrollX:sx,scrollY:sy,beg:r.startOffset-wb==0};}},moveToBookmark:function(b){var t=this,r=t.getRng(),s=t.getSel(),ro=t.dom.getRoot(),sd,nvl,nv;function getPos(r,sp,ep){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={},o,v,wa,wb;while((n=w.nextNode())!=null){wa=wb=0;nv=n.nodeValue||'';nv.replace(/^\s+[^\s]/,function(a){wb=a.length-1;});nv.replace(/[^\s]\s+$/,function(a){wa=a.length-1;});nvl=tinymce.trim(nv).length;p+=nvl;if(p>=sp&&!d.startNode){o=sp-(p-nvl);if(b.beg&&o>=nvl)continue;d.startNode=n;d.startOffset=o+wb;}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-nvl)+wb;return d;}}return null;};if(!b)return false;t.win.scrollTo(b.scrollX,b.scrollY);if(isIE){if(r=b.rng){try{r.select();}catch(ex){}return true;}t.win.focus();if(b.tag){r=ro.createControlRange();each(t.dom.select(b.tag),function(n,i){if(i==b.index)r.addElement(n);});}else{try{if(b.start<0)return true;r=s.createRange();r.moveToElementText(ro);r.collapse(true);r.moveStart('character',b.start);r.moveEnd('character',b.length);}catch(ex2){return true;}}try{r.select();}catch(ex){}return true;}if(!s)return false;if(b.rng){s.removeAllRanges();s.addRange(b.rng);}else{if(is(b.start)&&is(b.end)){try{sd=getPos(ro,b.start,b.end);if(sd){r=t.dom.doc.createRange();r.setStart(sd.startNode,sd.startOffset);r.setEnd(sd.endNode,sd.endOffset);s.removeAllRanges();s.addRange(r);}if(!tinymce.isOpera)t.win.focus();}catch(ex){}}}},select:function(n,c){var t=this,r=t.getRng(),s=t.getSel(),b,fn,ln,d=t.win.document;function first(n){return n?d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode():null;};function last(n){var c,o,w;if(!n)return null;w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(c=w.nextNode())o=c;return o;};if(isIE){try{b=d.body;if(/^(IMG|TABLE)$/.test(n.nodeName)){r=b.createControlRange();r.addElement(n);}else{r=b.createTextRange();r.moveToElementText(n);}r.select();}catch(ex){}}else{if(c){fn=first(n);ln=last(n);if(fn&&ln){r=d.createRange();r.setStart(fn,0);r.setEnd(ln,ln.nodeValue.length);}else r.selectNode(n);}else r.selectNode(n);t.setRng(r);}return n;},isCollapsed:function(){var t=this,r=t.getRng(),s=t.getSel();if(!r||r.item)return false;return!s||r.boundingWidth==0||s.isCollapsed;},collapse:function(b){var t=this,r=t.getRng(),n;if(r.item){n=r.item(0);r=this.win.document.body.createTextRange();r.moveToElementText(n);}r.collapse(!!b);t.setRng(r);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(){var t=this,s=t.getSel(),r;try{if(s)r=s.rangeCount>0?s.getRangeAt(0):(s.createRange?s.createRange():t.win.document.createRange());}catch(ex){}if(!r)r=isIE?t.win.document.body.createTextRange():t.win.document.createRange();return r;},setRng:function(r){var s;if(!isIE){s=this.getSel();if(s){s.removeAllRanges();s.addRange(r);}}else{try{r.select();}catch(ex){}}},setNode:function(n){var t=this;t.setContent(t.dom.getOuterHTML(n));return n;},getNode:function(){var t=this,r=t.getRng(),s=t.getSel(),e;if(!isIE){if(!r)return t.dom.getRoot();e=r.commonAncestorContainer;if(!r.collapsed){if(r.startContainer==r.endContainer||(tinymce.isWebKit&&r.startContainer==r.endContainer.parentNode)){if(r.startOffset-r.endOffset<2||tinymce.isWebKit){if(r.startContainer.hasChildNodes())e=r.startContainer.childNodes[r.startOffset];}}}return t.dom.getParent(e,function(n){return n.nodeType==1;});}return r.item?r.item(0):r.parentElement();},destroy:function(s){var t=this;t.win=null;if(!s)tinymce.removeUnload(t.destroy);}});})();(function(){tinymce.create('tinymce.dom.XMLWriter',{node:null,XMLWriter:function(s){function getXML(){var i=document.implementation;if(!i||!i.createDocument){try{return new ActiveXObject('MSXML2.DOMDocument');}catch(ex){}try{return new ActiveXObject('Microsoft.XmlDom');}catch(ex){}}else return i.createDocument('','',null);};this.doc=getXML();this.valid=tinymce.isOpera||tinymce.isWebKit;this.reset();},reset:function(){var t=this,d=t.doc;if(d.firstChild)d.removeChild(d.firstChild);t.node=d.appendChild(d.createElement("html"));},writeStartElement:function(n){var t=this;t.node=t.node.appendChild(t.doc.createElement(n));},writeAttribute:function(n,v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.setAttribute(n,v);},writeEndElement:function(){this.node=this.node.parentNode;},writeFullEndElement:function(){var t=this,n=t.node;n.appendChild(t.doc.createTextNode(""));t.node=n.parentNode;},writeText:function(v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.appendChild(this.doc.createTextNode(v));},writeCDATA:function(v){this.node.appendChild(this.doc.createCDATA(v));},writeComment:function(v){this.node.appendChild(this.doc.createComment(v));},getContent:function(){var h;h=this.doc.xml||new XMLSerializer().serializeToString(this.doc);h=h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,'');h=h.replace(/ ?\/>/g,' />');if(this.valid)h=h.replace(/\%MCGT%/g,'&gt;');return h;}});})();(function(){tinymce.create('tinymce.dom.StringWriter',{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(s){this.settings=tinymce.extend({indent_char:' ',indentation:1},s);this.reset();},reset:function(){this.indent='';this.str="";this.tags=[];this.count=0;},writeStartElement:function(n){this._writeAttributesEnd();this.writeRaw('<'+n);this.tags.push(n);this.inAttr=true;this.count++;this.elementCount=this.count;},writeAttribute:function(n,v){var t=this;t.writeRaw(" "+t.encode(n)+'="'+t.encode(v)+'"');},writeEndElement:function(){var n;if(this.tags.length>0){n=this.tags.pop();if(this._writeAttributesEnd(1))this.writeRaw('</'+n+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw('</'+this.tags.pop()+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeText:function(v){this._writeAttributesEnd();this.writeRaw(this.encode(v));this.count++;},writeCDATA:function(v){this._writeAttributesEnd();this.writeRaw('<![CDATA['+v+']]>');this.count++;},writeComment:function(v){this._writeAttributesEnd();this.writeRaw('<!-- '+v+'-->');this.count++;},writeRaw:function(v){this.str+=v;},encode:function(s){return s.replace(/[<>&"]/g,function(v){switch(v){case'<':return'&lt;';case'>':return'&gt;';case'&':return'&amp;';case'"':return'&quot;';}return v;});},getContent:function(){return this.str;},_writeAttributesEnd:function(s){if(!this.inAttr)return;this.inAttr=false;if(s&&this.elementCount==this.count){this.writeRaw(' />');return false;}this.writeRaw('>');return true;}});})();(function(){var extend=tinymce.extend,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,isIE=tinymce.isIE,isGecko=tinymce.isGecko;function getIEAtts(n){var o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;};function wildcardToRE(s){return s.replace(/([?+*])/g,'.$1');};tinymce.create('tinymce.dom.Serializer',{Serializer:function(s){var t=this;t.key=0;t.onPreProcess=new Dispatcher(t);t.onPostProcess=new Dispatcher(t);if(tinymce.relaxedDomain&&tinymce.isGecko){t.writer=new tinymce.dom.StringWriter();}else{try{t.writer=new tinymce.dom.XMLWriter();}catch(ex){t.writer=new tinymce.dom.StringWriter();}}t.settings=s=extend({dom:tinymce.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_)/,closed:/(br|hr|input|meta|img|link|param)/,entity_encoding:'named',entities:'160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',valid_elements:'*[*]',extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:0,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,font_size_style_values:0,apply_source_formatting:0,indent_mode:'simple',indent_char:'\t',indent_levels:1,remove_linebreaks:1},s);t.dom=s.dom;if(s.fix_list_elements){t.onPreProcess.add(function(se,o){var nl,x,a=['ol','ul'],i,n,p,r=/^(OL|UL)$/,np;function prevNode(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e;}}return null;};for(x=0;x<a.length;x++){nl=t.dom.select(a[x],o.node);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=prevNode(n,'LI');if(!np){np=t.dom.create('li');np.innerHTML='&nbsp;';np.appendChild(n);p.insertBefore(np,p.firstChild);}else np.appendChild(n);}}}});}if(s.fix_table_elements){t.onPreProcess.add(function(se,o){each(t.dom.select('table',o.node),function(e){var pa=t.dom.getParent(e,'H1,H2,H3,H4,H5,H6,P'),pa2,n,tm,pl=[],i,ns;if(pa){pa2=pa.cloneNode(false);pl.push(e);for(n=e;n=n.parentNode;){pl.push(n);if(n==pa)break;}tm=pa2;for(i=pl.length-1;i>=0;i--){if(i==pl.length-1){while(ns=pl[i-1].nextSibling)tm.appendChild(ns.parentNode.removeChild(ns));}else{n=pl[i].cloneNode(false);if(i!=0){while(ns=pl[i-1].nextSibling)n.appendChild(ns.parentNode.removeChild(ns));}tm=tm.appendChild(n);}}e=t.dom.insertAfter(e.parentNode.removeChild(e),pa);t.dom.insertAfter(e,pa);t.dom.insertAfter(pa2,e);}});});}},setEntities:function(s){var t=this,a,i,l={},re='',v;if(t.entityLookup)return;a=s.split(',');for(i=0;i<a.length;i+=2){v=a[i];if(v==34||v==38||v==60||v==62)continue;l[String.fromCharCode(a[i])]=a[i+1];v=parseInt(a[i]).toString(16);re+='\\u'+'0000'.substring(v.length)+v;}if(!re){t.settings.entity_encoding='raw';return;}t.entitiesRE=new RegExp('['+re+']','g');t.entityLookup=l;},setValidChildRules:function(s){this.childRules=null;this.addValidChildRules(s);},addValidChildRules:function(s){var t=this,inst,intr,bloc;if(!s)return;inst='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';intr='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';bloc='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';each(s.split(','),function(s){var p=s.split(/\[|\]/),re;s='';each(p[1].split('|'),function(v){if(s)s+='|';switch(v){case'%itrans':v=intr;break;case'%itrans_na':v=intr.substring(2);break;case'%istrict':v=inst;break;case'%istrict_na':v=inst.substring(2);break;case'%btrans':v=bloc;break;case'%bstrict':v=bloc;break;}s+=v;});re=new RegExp('^('+s.toLowerCase()+')$','i');each(p[0].split('/'),function(s){t.childRules=t.childRules||{};t.childRules[s]=re;});});s='';each(t.childRules,function(v,k){if(s)s+='|';s+=k;});t.parentElementsRE=new RegExp('^('+s.toLowerCase()+')$','i');},setRules:function(s){var t=this;t._setup();t.rules={};t.wildRules=[];t.validElements={};return t.addRules(s);},addRules:function(s){var t=this,dr;if(!s)return;t._setup();each(s.split(','),function(s){var p=s.split(/\[|\]/),tn=p[0].split('/'),ra,at,wat,va=[];if(dr)at=tinymce.extend([],dr.attribs);if(p.length>1){each(p[1].split('|'),function(s){var ar={},i;at=at||[];s=s.replace(/::/g,'~');s=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);s[2]=s[2].replace(/~/g,':');if(s[1]=='!'){ra=ra||[];ra.push(s[2]);}if(s[1]=='-'){for(i=0;i<at.length;i++){if(at[i].name==s[2]){at.splice(i,1);return;}}}switch(s[3]){case'=':ar.defaultVal=s[4]||'';break;case':':ar.forcedVal=s[4];break;case'<':ar.validVals=s[4].split('?');break;}if(/[*.?]/.test(s[2])){wat=wat||[];ar.nameRE=new RegExp('^'+wildcardToRE(s[2])+'$');wat.push(ar);}else{ar.name=s[2];at.push(ar);}va.push(s[2]);});}each(tn,function(s,i){var pr=s.charAt(0),x=1,ru={};if(dr){if(dr.noEmpty)ru.noEmpty=dr.noEmpty;if(dr.fullEnd)ru.fullEnd=dr.fullEnd;if(dr.padd)ru.padd=dr.padd;}switch(pr){case'-':ru.noEmpty=true;break;case'+':ru.fullEnd=true;break;case'#':ru.padd=true;break;default:x=0;}tn[i]=s=s.substring(x);t.validElements[s]=1;if(/[*.?]/.test(tn[0])){ru.nameRE=new RegExp('^'+wildcardToRE(tn[0])+'$');t.wildRules=t.wildRules||{};t.wildRules.push(ru);}else{ru.name=tn[0];if(tn[0]=='@')dr=ru;t.rules[s]=ru;}ru.attribs=at;if(ra)ru.requiredAttribs=ra;if(wat){s='';each(va,function(v){if(s)s+='|';s+='('+wildcardToRE(v)+')';});ru.validAttribsRE=new RegExp('^'+s.toLowerCase()+'$');ru.wildAttribs=wat;}});});s='';each(t.validElements,function(v,k){if(s)s+='|';if(k!='@')s+=k;});t.validElementsRE=new RegExp('^('+wildcardToRE(s.toLowerCase())+')$');},findRule:function(n){var t=this,rl=t.rules,i,r;t._setup();r=rl[n];if(r)return r;rl=t.wildRules;for(i=0;i<rl.length;i++){if(rl[i].nameRE.test(n))return rl[i];}return null;},findAttribRule:function(ru,n){var i,wa=ru.wildAttribs;for(i=0;i<wa.length;i++){if(wa[i].nameRE.test(n))return wa[i];}return null;},serialize:function(n,o){var h,t=this;t._setup();o=o||{};o.format=o.format||'html';t.processObj=o;n=n.cloneNode(true);t.key=''+(parseInt(t.key)+1);if(!o.no_events){o.node=n;t.onPreProcess.dispatch(t,o);}t.writer.reset();t._serializeNode(n,o.getInner);o.content=t.writer.getContent();if(!o.no_events)t.onPostProcess.dispatch(t,o);t._postProcess(o);o.node=null;return tinymce.trim(o.content);},_postProcess:function(o){var t=this,s=t.settings,h=o.content,sc=[],p,l;if(o.format=='html'){p=t._protect({content:h,patterns:[/(<script[^>]*>)(.*?)(<\/script>)/g,/(<style[^>]*>)(.*?)(<\/style>)/g,/(<pre[^>]*>)(.*?)(<\/pre>)/g]});h=p.content;if(s.entity_encoding!=='raw'){if(s.entity_encoding.indexOf('named')!=-1){t.setEntities(s.entities);l=t.entityLookup;h=h.replace(t.entitiesRE,function(a){var v;if(v=l[a])a='&'+v+';';return a;});}if(s.entity_encoding.indexOf('numeric')!=-1){h=h.replace(/[\u007E-\uFFFF]/g,function(a){return'&#'+a.charCodeAt(0)+';';});}}if(!o.set){h=h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,s.entity_encoding=='numeric'?'<p$1>&#160;</p>':'<p$1>&nbsp;</p>');if(s.remove_linebreaks){h=h.replace(/\r?\n|\r/g,' ');h=h.replace(/(<[^>]+>)\s+/g,'$1 ');h=h.replace(/\s+(<\/[^>]+>)/g,' $1');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,'<$1 $2>');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,'<$1>');h=h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,'</$1>');}if(s.apply_source_formatting&&s.indent_mode=='simple'){h=h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,'\n<$1$2$3>\n');h=h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,'\n<$1$2>');h=h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,'</$1>\n');h=h.replace(/\n\n/g,'\n');}}h=t._unprotect(h,p);if(s.entity_encoding=='raw')h=h.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g,'<p$1>\u00a0</p>');}o.content=h;},_serializeNode:function(n,inn){var t=this,s=t.settings,w=t.writer,hc,el,cn,i,l,a,at,no,v,nn,ru,ar,iv;if(!s.node_filter||s.node_filter(n)){switch(n.nodeType){case 1:if(n.hasAttribute?n.hasAttribute('mce_bogus'):n.getAttribute('mce_bogus'))return;iv=false;hc=n.hasChildNodes();nn=n.getAttribute('mce_name')||n.nodeName.toLowerCase();if(isIE){if(n.scopeName!=='HTML'&&n.scopeName!=='html')nn=n.scopeName+':'+nn;}if(nn.indexOf('mce:')===0)nn=nn.substring(4);if(!t.validElementsRE.test(nn)||(t.invalidElementsRE&&t.invalidElementsRE.test(nn))||inn){iv=true;break;}if(isIE){if(s.fix_content_duplication){if(n.mce_serialized==t.key)return;n.mce_serialized=t.key;}if(nn.charAt(0)=='/')nn=nn.substring(1);}else if(isGecko){if(n.nodeName==='BR'&&n.getAttribute('type')=='_moz')return;}if(t.childRules){if(t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(nn)){iv=true;break;}}t.elementName=nn;}ru=t.findRule(nn);nn=ru.name||nn;if((!hc&&ru.noEmpty)||(isIE&&!nn)){iv=true;break;}if(ru.requiredAttribs){a=ru.requiredAttribs;for(i=a.length-1;i>=0;i--){if(this.dom.getAttrib(n,a[i])!=='')break;}if(i==-1){iv=true;break;}}w.writeStartElement(nn);if(ru.attribs){for(i=0,at=ru.attribs,l=at.length;i<l;i++){a=at[i];v=t._getAttrib(n,a);if(v!==null)w.writeAttribute(a.name,v);}}if(ru.validAttribsRE){at=isIE?getIEAtts(n):n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified){a=no.nodeName.toLowerCase();if(s.invalid_attrs.test(a)||!ru.validAttribsRE.test(a))continue;ar=t.findAttribRule(ru,a);v=t._getAttrib(n,ar,a);if(v!==null)w.writeAttribute(a,v);}}}if(!hc&&ru.padd)w.writeText('\u00a0');break;case 3:if(t.childRules&&t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(n.nodeName))return;}return w.writeText(n.nodeValue);case 4:return w.writeCDATA(n.nodeValue);case 8:return w.writeComment(n.nodeValue);}}else if(n.nodeType==1)hc=n.hasChildNodes();if(hc){cn=n.firstChild;while(cn){t._serializeNode(cn);t.elementName=nn;cn=cn.nextSibling;}}if(!iv){if(hc||!s.closed.test(nn))w.writeFullEndElement();else w.writeEndElement();}},_protect:function(o){o.items=o.items||[];function enc(s){return s.replace(/[\r\n\\]/g,function(c){if(c==='\n')return'\\n';else if(c==='\\')return'\\\\';return'\\r';});};function dec(s){return s.replace(/\\[\\rn]/g,function(c){if(c==='\\n')return'\n';else if(c==='\\\\')return'\\';return'\r';});};each(o.patterns,function(p){o.content=dec(enc(o.content).replace(p,function(x,a,b,c){o.items.push(dec(b));return a+'<!--mce:'+(o.items.length-1)+'-->'+c;}));});return o;},_unprotect:function(h,o){h=h.replace(/\<!--mce:([0-9]+)--\>/g,function(a,b){return o.items[parseInt(b)];});o.items=[];return h;},_setup:function(){var t=this,s=this.settings;if(t.done)return;t.done=1;t.setRules(s.valid_elements);t.addRules(s.extended_valid_elements);t.addValidChildRules(s.valid_child_elements);if(s.invalid_elements)t.invalidElementsRE=new RegExp('^('+wildcardToRE(s.invalid_elements.replace(',','|').toLowerCase())+')$');if(s.attrib_value_filter)t.attribValueFilter=s.attribValueFilter;},_getAttrib:function(n,a,na){var i,v;na=na||a.name;if(a.forcedVal&&(v=a.forcedVal)){if(v==='{$uid}')return this.dom.uniqueId();return v;}v=this.dom.getAttrib(n,na);switch(na){case'rowspan':case'colspan':if(v=='1')v='';break;}if(this.attribValueFilter)v=this.attribValueFilter(na,v,n);if(a.validVals){for(i=a.validVals.length-1;i>=0;i--){if(v==a.validVals[i])break;}if(i==-1)return null;}if(v===''&&typeof(a.defaultVal)!='undefined'){v=a.defaultVal;if(v==='{$uid}')return this.dom.uniqueId();return v;}else{if(na=='class'&&this.processObj.get)v=v.replace(/\s?mceItem\w+\s?/g,'');}if(v==='')return null;return v;}});})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.ScriptLoader',{ScriptLoader:function(s){this.settings=s||{};this.queue=[];this.lookup={};},isDone:function(u){return this.lookup[u]?this.lookup[u].state==2:0;},markDone:function(u){this.lookup[u]={state:2,url:u};},add:function(u,cb,s,pr){var t=this,lo=t.lookup,o;if(o=lo[u]){if(cb&&o.state==2)cb.call(s||this);return o;}o={state:0,url:u,func:cb,scope:s||this};if(pr)t.queue.unshift(o);else t.queue.push(o);lo[u]=o;return o;},load:function(u,cb,s){var t=this,o;if(o=t.lookup[u]){if(cb&&o.state==2)cb.call(s||t);return o;}function loadScript(u){if(tinymce.dom.Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:u,error:t.settings.error,async:false,success:function(co){t.eval(co);}});}else document.write('<script type="text/javascript" src="'+u+'"></script>');};if(!tinymce.is(u,'string')){each(u,function(u){loadScript(u);});if(cb)cb.call(s||t);}else{loadScript(u);if(cb)cb.call(s||t);}},loadQueue:function(cb,s){var t=this;if(!t.queueLoading){t.queueLoading=1;t.queueCallbacks=[];t.loadScripts(t.queue,function(){t.queueLoading=0;if(cb)cb.call(s||t);each(t.queueCallbacks,function(o){o.func.call(o.scope);});});}else if(cb)t.queueCallbacks.push({func:cb,scope:s||t});},eval:function(co){var w=window;if(!w.execScript){try{eval.call(w,co);}catch(ex){eval(co,w);}}else w.execScript(co);},loadScripts:function(sc,cb,s){var t=this,lo=t.lookup;function done(o){o.state=2;if(o.func)o.func.call(o.scope||t);};function allDone(){var l;l=sc.length;each(sc,function(o){o=lo[o.url];if(o.state===2){done(o);l--;}else load(o);});if(l===0&&cb){cb.call(s||t);cb=0;}};function load(o){if(o.state>0)return;o.state=1;tinymce.util.XHR.send({url:o.url,error:t.settings.error,success:function(co){t.eval(co);done(o);allDone();}});};each(sc,function(o){var u=o.url;if(!lo[u]){lo[u]=o;t.queue.push(o);}else o=lo[u];if(o.state>0)return;if(!tinymce.dom.Event.domLoaded&&!t.settings.strict_mode){var ix,ol='';if(cb||o.func){o.state=1;ix=tinymce.dom.ScriptLoader._addOnLoad(function(){done(o);allDone();});if(tinymce.isIE)ol=' onreadystatechange="';else ol=' onload="';ol+='tinymce.dom.ScriptLoader._onLoad(this,\''+u+'\','+ix+');"';}document.write('<script type="text/javascript" src="'+u+'"'+ol+'></script>');if(!o.func)done(o);}else load(o);});allDone();},'static':{_addOnLoad:function(f){var t=this;t._funcs=t._funcs||[];t._funcs.push(f);return t._funcs.length-1;},_onLoad:function(e,u,ix){if(!tinymce.isIE||e.readyState=='complete')this._funcs[ix].call(this);}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader();})();(function(){var DOM=tinymce.DOM,is=tinymce.is;tinymce.create('tinymce.ui.Control',{Control:function(id,s){this.id=id;this.settings=s=s||{};this.rendered=false;this.onRender=new tinymce.util.Dispatcher(this);this.classPrefix='';this.scope=s.scope||this;this.disabled=0;this.active=0;},setDisabled:function(s){var e;if(s!=this.disabled){e=DOM.get(this.id);if(e&&this.settings.unavailable_prefix){if(s){this.prevTitle=e.title;e.title=this.settings.unavailable_prefix+": "+e.title;}else e.title=this.prevTitle;}this.setState('Disabled',s);this.setState('Enabled',!s);this.disabled=s;}},isDisabled:function(){return this.disabled;},setActive:function(s){if(s!=this.active){this.setState('Active',s);this.active=s;}},isActive:function(){return this.active;},setState:function(c,s){var n=DOM.get(this.id);c=this.classPrefix+c;if(s)DOM.addClass(n,c);else DOM.removeClass(n,c);},isRendered:function(){return this.rendered;},renderHTML:function(){},renderTo:function(n){DOM.setHTML(n,this.renderHTML());},postRender:function(){var t=this,b;if(is(t.disabled)){b=t.disabled;t.disabled=-1;t.setDisabled(b);}if(is(t.active)){b=t.active;t.active=-1;t.setActive(b);}},remove:function(){DOM.remove(this.id);this.destroy();},destroy:function(){tinymce.dom.Event.clear(this.id);}});})();tinymce.create('tinymce.ui.Container:tinymce.ui.Control',{Container:function(id,s){this.parent(id,s);this.controls=[];this.lookup={};},add:function(c){this.lookup[c.id]=c;this.controls.push(c);return c;},get:function(n){return this.lookup[n];}});tinymce.create('tinymce.ui.Separator:tinymce.ui.Control',{Separator:function(id,s){this.parent(id,s);this.classPrefix='mceSeparator';},renderHTML:function(){return tinymce.DOM.createHTML('span',{'class':this.classPrefix});}});(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control',{MenuItem:function(id,s){this.parent(id,s);this.classPrefix='mceMenuItem';},setSelected:function(s){this.setState('Selected',s);this.selected=s;},isSelected:function(){return this.selected;},postRender:function(){var t=this;t.parent();if(is(t.selected))t.setSelected(t.selected);}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem',{Menu:function(id,s){var t=this;t.parent(id,s);t.items={};t.collapsed=false;t.menuCount=0;t.onAddItem=new tinymce.util.Dispatcher(this);},expand:function(d){var t=this;if(d){walk(t,function(o){if(o.expand)o.expand();},'items',t);}t.collapsed=false;},collapse:function(d){var t=this;if(d){walk(t,function(o){if(o.collapse)o.collapse();},'items',t);}t.collapsed=true;},isCollapsed:function(){return this.collapsed;},add:function(o){if(!o.settings)o=new tinymce.ui.MenuItem(o.id||DOM.uniqueId(),o);this.onAddItem.dispatch(this,o);return this.items[o.id]=o;},addSeparator:function(){return this.add({separator:true});},addMenu:function(o){if(!o.collapse)o=this.createMenu(o);this.menuCount++;return this.add(o);},hasMenus:function(){return this.menuCount!==0;},remove:function(o){delete this.items[o.id];},removeAll:function(){var t=this;walk(t,function(o){if(o.removeAll)o.removeAll();else o.remove();o.destroy();},'items',t);t.items={};},createMenu:function(o){var m=new tinymce.ui.Menu(o.id||DOM.uniqueId(),o);m.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return m;}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,Event=tinymce.dom.Event,Element=tinymce.dom.Element;tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu',{DropMenu:function(id,s){s=s||{};s.container=s.container||DOM.doc.body;s.offset_x=s.offset_x||0;s.offset_y=s.offset_y||0;s.vp_offset_x=s.vp_offset_x||0;s.vp_offset_y=s.vp_offset_y||0;if(is(s.icons)&&!s.icons)s['class']+=' mceNoIcons';this.parent(id,s);this.onShowMenu=new tinymce.util.Dispatcher(this);this.onHideMenu=new tinymce.util.Dispatcher(this);this.classPrefix='mceMenu';this.fixIE=tinymce.isIE&&DOM.win.top!=DOM.win;},createMenu:function(s){var t=this,cs=t.settings,m;s.container=s.container||cs.container;s.parent=t;s.constrain=s.constrain||cs.constrain;s['class']=s['class']||cs['class'];s.vp_offset_x=s.vp_offset_x||cs.vp_offset_x;s.vp_offset_y=s.vp_offset_y||cs.vp_offset_y;m=new tinymce.ui.DropMenu(s.id||DOM.uniqueId(),s);m.onAddItem.add(t.onAddItem.dispatch,t.onAddItem);return m;},update:function(){var t=this,s=t.settings,tb=DOM.get('menu_'+t.id+'_tbl'),co=DOM.get('menu_'+t.id+'_co'),tw,th;tw=s.max_width?Math.min(tb.clientWidth,s.max_width):tb.clientWidth;th=s.max_height?Math.min(tb.clientHeight,s.max_height):tb.clientHeight;if(!DOM.boxModel)t.element.setStyles({width:tw+2,height:th+2});else t.element.setStyles({width:tw,height:th});if(s.max_width)DOM.setStyle(co,'width',tw);if(s.max_height){DOM.setStyle(co,'height',th);if(tb.clientHeight<s.max_height)DOM.setStyle(co,'overflow','hidden');}},showMenu:function(x,y,px){var t=this,s=t.settings,co,vp=DOM.getViewPort(),w,h,mx,my,ot=2,dm,tb,cp=t.classPrefix;t.collapse(1);if(t.isMenuVisible)return;if(!t.rendered){co=DOM.add(t.settings.container,t.renderNode());each(t.items,function(o){o.postRender();});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});}else co=DOM.get('menu_'+t.id);if(!tinymce.isOpera)DOM.setStyles(co,{left:-0xFFFF,top:-0xFFFF});DOM.show(co);t.update();x+=s.offset_x||0;y+=s.offset_y||0;vp.w-=4;vp.h-=4;if(s.constrain){w=co.clientWidth-ot;h=co.clientHeight-ot;mx=vp.x+vp.w;my=vp.y+vp.h;if((x+s.vp_offset_x+w)>mx)x=px?px-w:Math.max(0,(mx-s.vp_offset_x)-w);if((y+s.vp_offset_y+h)>my)y=Math.max(0,(my-s.vp_offset_y)-h);}DOM.setStyles(co,{left:x,top:y});t.element.update();t.isMenuVisible=1;t.mouseClickFunc=Event.add(co,t.fixIE?'mousedown':'click',function(e){var m;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))&&!DOM.hasClass(e,cp+'ItemSub')){m=t.items[e.id];if(m.isDisabled())return;dm=t;while(dm){if(dm.hideMenu)dm.hideMenu();dm=dm.settings.parent;}if(m.settings.onclick)m.settings.onclick(e);return Event.cancel(e);}});if(t.hasMenus()){t.mouseOverFunc=Event.add(co,'mouseover',function(e){var m,r,mi;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))){m=t.items[e.id];if(t.lastMenu)t.lastMenu.collapse(1);if(m.isDisabled())return;if(e&&DOM.hasClass(e,cp+'ItemSub')){r=DOM.getRect(e);m.showMenu((r.x+r.w-ot),r.y-ot,r.x);t.lastMenu=m;DOM.addClass(DOM.get(m.id).firstChild,cp+'ItemActive');}}});}t.onShowMenu.dispatch(t);if(s.keyboard_focus){Event.add(co,'keydown',t._keyHandler,t);DOM.select('a','menu_'+t.id)[0].focus();}},hideMenu:function(c){var t=this,co=DOM.get('menu_'+t.id),e;if(!t.isMenuVisible)return;Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,t.fixIE?'mousedown':'click',t.mouseClickFunc);Event.remove(co,'keydown',t._keyHandler);DOM.hide(co);t.isMenuVisible=0;if(!c)t.collapse(1);if(t.element)t.element.hide();if(e=DOM.get(t.id))DOM.removeClass(e.firstChild,t.classPrefix+'ItemActive');t.onHideMenu.dispatch(t);},add:function(o){var t=this,co;o=t.parent(o);if(t.isRendered&&(co=DOM.get('menu_'+t.id)))t._add(DOM.select('tbody',co)[0],o);return o;},collapse:function(d){this.parent(d);this.hideMenu(1);},remove:function(o){DOM.remove(o.id);this.destroy();return this.parent(o);},destroy:function(){var t=this,co=DOM.get('menu_'+t.id);Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);if(t.element)t.element.remove();DOM.remove(co);},renderNode:function(){var t=this,s=t.settings,n,tb,co,w;w=DOM.create('div',{id:'menu_'+t.id,'class':s['class'],'style':'position:absolute;left:0;top:0;z-index:200000'});co=DOM.add(w,'div',{id:'menu_'+t.id+'_co','class':t.classPrefix+(s['class']?' '+s['class']:'')});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});if(s.menu_line)DOM.add(co,'span',{'class':t.classPrefix+'Line'});n=DOM.add(co,'table',{id:'menu_'+t.id+'_tbl',border:0,cellPadding:0,cellSpacing:0});tb=DOM.add(n,'tbody');each(t.items,function(o){t._add(tb,o);});t.rendered=true;return w;},_keyHandler:function(e){if(e.keyCode==27)this.hideMenu();},_add:function(tb,o){var n,s=o.settings,a,ro,it,cp=this.classPrefix;if(s.separator){ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'ItemSeparator'});DOM.add(ro,'td',{'class':cp+'ItemSeparator'});if(n=ro.previousSibling)DOM.addClass(n,'mceLast');return;}n=ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'Item '+cp+'ItemEnabled'});n=it=DOM.add(n,'td');n=a=DOM.add(n,'a',{href:'javascript:;',onclick:"return false;",onmousedown:'return false;'});DOM.addClass(it,s['class']);DOM.add(n,'span',{'class':'mceIcon'+(s.icon?' mce_'+s.icon:'')});n=DOM.add(n,s.element||'span',{'class':'mceText',title:o.settings.title},o.settings.title);if(o.settings.style)DOM.setAttrib(n,'style',o.settings.style);if(tb.childNodes.length==1)DOM.addClass(ro,'mceFirst');if((n=ro.previousSibling)&&DOM.hasClass(n,cp+'ItemSeparator'))DOM.addClass(ro,'mceFirst');if(o.collapse)DOM.addClass(ro,cp+'ItemSub');if(n=ro.previousSibling)DOM.removeClass(n,'mceLast');DOM.addClass(ro,'mceLast');}});})();(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.ui.Button:tinymce.ui.Control',{Button:function(id,s){this.parent(id,s);this.classPrefix='mceButton';},renderHTML:function(){var cp=this.classPrefix,s=this.settings,h='<a id="'+this.id+'" href="javascript:;" class="'+cp+' '+cp+'Enabled '+s['class']+'" onmousedown="return false;" onclick="return false;" title="'+DOM.encode(s.title)+'">';if(s.image)h+='<img class="mceIcon" src="'+s.image+'" /></a>';else h+='<span class="mceIcon '+s['class']+'"></span></a>';return h;},postRender:function(){var t=this,s=t.settings;tinymce.dom.Event.add(t.id,'click',function(e){if(!t.isDisabled())return s.onclick.call(s.scope,e);});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s){var t=this;t.parent(id,s);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';},select:function(v){var t=this,e,fv;if(v!=t.selectedValue){e=DOM.get(t.id+'_text');t.selectedValue=v;each(t.items,function(o){if(o.value==v){DOM.setHTML(e,DOM.encode(o.title));fv=1;return false;}});if(!fv){DOM.setHTML(e,DOM.encode(t.settings.title));DOM.addClass(e,'mceTitle');e=0;return;}else DOM.removeClass(e,'mceTitle');}e=0;},add:function(n,v,o){var t=this;o=o||{};o=tinymce.extend(o,{title:n,value:v});t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return this.items.length;},renderHTML:function(){var h='',t=this,s=t.settings,cp=t.classPrefix;h='<table id="'+t.id+'" cellpadding="0" cellspacing="0" class="'+cp+' '+cp+'Enabled'+(s['class']?(' '+s['class']):'')+'"><tbody><tr>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_text',href:'javascript:;','class':'mceText',onclick:"return false;",onmousedown:'return false;'},DOM.encode(t.settings.title))+'</td>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',tabindex:-1,href:'javascript:;','class':'mceOpen',onclick:"return false;",onmousedown:'return false;'},'<span></span>')+'</td>';h+='</tr></tbody></table>';return h;},showMenu:function(){var t=this,p1,p2,e=DOM.get(this.id),m;if(t.isDisabled()||t.items.length==0)return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(this.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.keyboard_focus=t._focused;if(t.oldID)m.items[t.oldID].setSelected(0);each(t.items,function(o){if(o.value===t.selectedValue){m.items[o.id].setSelected(1);t.oldID=o.id;}});m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);DOM.addClass(t.id,t.classPrefix+'Selected');},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){DOM.removeClass(t.id,t.classPrefix+'Selected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':t.classPrefix+'Menu mceNoIcons',max_width:150,max_height:150});m.onHideMenu.add(t.hideMenu,t);m.add({title:t.settings.title,'class':'mceMenuItemTitle'}).setDisabled(1);each(t.items,function(o){o.id=DOM.uniqueId();o.onclick=function(){if(t.settings.onselect(o.value)!==false)t.select(o.value);};m.add(o);});t.onRenderMenu.dispatch(t,m);t.menu=m;},postRender:function(){var t=this,cp=t.classPrefix;Event.add(t.id,'click',t.showMenu,t);Event.add(t.id+'_text','focus',function(){t._focused=1;});Event.add(t.id+'_text','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.addClass(t.id,cp+'Hover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.removeClass(t.id,cp+'Hover');});}t.onPostRender.dispatch(t,DOM.get(t.id));},destroy:function(){this.parent();Event.clear(this.id+'_text');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox',{NativeListBox:function(id,s){this.parent(id,s);this.classPrefix='mceNativeListBox';},setDisabled:function(s){DOM.get(this.id).disabled=s;},isDisabled:function(){return DOM.get(this.id).disabled;},select:function(v){var e=DOM.get(this.id),ol=e.options;v=''+(v||'');e.selectedIndex=0;each(ol,function(o,i){if(o.value==v){e.selectedIndex=i;return false;}});},add:function(n,v,a){var o,t=this;a=a||{};a.value=v;if(t.isRendered())DOM.add(DOM.get(this.id),'option',a,n);o={title:n,value:v,attribs:a};t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return DOM.get(this.id).options.length-1;},renderHTML:function(){var h,t=this;h=DOM.createHTML('option',{value:''},'-- '+t.settings.title+' --');each(t.items,function(it){h+=DOM.createHTML('option',{value:it.value},it.title);});h=DOM.createHTML('select',{id:t.id,'class':'mceNativeListBox'},h);return h;},postRender:function(){var t=this,ch;t.rendered=true;function onChange(e){var v=e.target.options[e.target.selectedIndex].value;t.onChange.dispatch(t,v);if(t.settings.onselect)t.settings.onselect(v);};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf;Event.remove(t.id,'change',ch);bf=Event.add(t.id,'blur',function(){Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(e.keyCode==13||e.keyCode==32){onChange(e);return Event.cancel(e);}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s){this.parent(id,s);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(t.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.vp_offset_x=p2.x;m.settings.vp_offset_y=p2.y;m.settings.keyboard_focus=t._focused;m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);t.setState('Selected',1);},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':this.classPrefix+'Menu',icons:t.settings.icons});m.onHideMenu.add(t.hideMenu,t);t.onRenderMenu.dispatch(t,m);t.menu=m;},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){t.setState('Selected',0);Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},postRender:function(){var t=this,s=t.settings;Event.add(t.id,'click',function(){if(!t.isDisabled()){if(s.onclick)s.onclick(t.value);t.showMenu();}});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton',{SplitButton:function(id,s){this.parent(id,s);this.classPrefix='mceSplitButton';},renderHTML:function(){var h,t=this,s=t.settings,h1;h='<tbody><tr>';if(s.image)h1=DOM.createHTML('img ',{src:s.image,'class':'mceAction '+s['class']});else h1=DOM.createHTML('span',{'class':'mceAction '+s['class']},'');h+='<td>'+DOM.createHTML('a',{id:t.id+'_action',href:'javascript:;','class':'mceAction '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h1=DOM.createHTML('span',{'class':'mceOpen '+s['class']});h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',href:'javascript:;','class':'mceOpen '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h+='</tr></tbody>';return DOM.createHTML('table',{id:t.id,'class':'mceSplitButton mceSplitButtonEnabled '+s['class'],cellpadding:'0',cellspacing:'0',onmousedown:'return false;',title:s.title},h);},postRender:function(){var t=this,s=t.settings;if(s.onclick){Event.add(t.id+'_action','click',function(){if(!t.isDisabled())s.onclick(t.value);});}Event.add(t.id+'_open','click',t.showMenu,t);Event.add(t.id+'_open','focus',function(){t._focused=1;});Event.add(t.id+'_open','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.addClass(t.id,'mceSplitButtonHover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.removeClass(t.id,'mceSplitButtonHover');});}},destroy:function(){this.parent();Event.clear(this.id+'_action');Event.clear(this.id+'_open');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,is=tinymce.is,each=tinymce.each;tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton',{ColorSplitButton:function(id,s){var t=this;t.parent(id,s);t.settings=s=tinymce.extend({colors:'000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',grid_width:8,default_color:'#888888'},t.settings);t.value=s.default_color;},showMenu:function(){var t=this,r,p,e,p2;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}e=DOM.get(t.id);DOM.show(t.id+'_menu');DOM.addClass(e,'mceSplitButtonSelected');p2=DOM.getPos(e);DOM.setStyles(t.id+'_menu',{left:p2.x,top:p2.y+e.clientHeight,zIndex:200000});e=0;Event.add(DOM.doc,'mousedown',t.hideMenu,t);if(t._focused){t._keyHandler=Event.add(t.id+'_menu','keydown',function(e){if(e.keyCode==27)t.hideMenu();});DOM.select('a',t.id+'_menu')[0].focus();}},hideMenu:function(e){var t=this;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceSplitButtonMenu');})){DOM.removeClass(t.id,'mceSplitButtonSelected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);Event.remove(t.id+'_menu','keydown',t._keyHandler);DOM.hide(t.id+'_menu');}},renderMenu:function(){var t=this,m,i=0,s=t.settings,n,tb,tr,w;w=DOM.add(s.menu_container,'div',{id:t.id+'_menu','class':s['menu_class']+' '+s['class'],style:'position:absolute;left:0;top:-1000px;'});m=DOM.add(w,'div',{'class':s['class']+' mceSplitButtonMenu'});DOM.add(m,'span',{'class':'mceMenuLine'});n=DOM.add(m,'table',{'class':'mceColorSplitMenu'});tb=DOM.add(n,'tbody');i=0;each(is(s.colors,'array')?s.colors:s.colors.split(','),function(c){c=c.replace(/^#/,'');if(!i--){tr=DOM.add(tb,'tr');i=s.grid_width-1;}n=DOM.add(tr,'td');n=DOM.add(n,'a',{href:'javascript:;',style:{backgroundColor:'#'+c},mce_color:'#'+c});});if(s.more_colors_func){n=DOM.add(tb,'tr');n=DOM.add(n,'td',{colspan:s.grid_width,'class':'mceMoreColors'});n=DOM.add(n,'a',{id:t.id+'_more',href:'javascript:;',onclick:'return false;','class':'mceMoreColors'},s.more_colors_title);Event.add(n,'click',function(e){s.more_colors_func.call(s.more_colors_scope||this);return Event.cancel(e);});}DOM.addClass(m,'mceColorSplitMenu');Event.add(t.id+'_menu','click',function(e){var c;e=e.target;if(e.nodeName=='A'&&(c=e.getAttribute('mce_color')))t.setColor(c);});return w;},setColor:function(c){var t=this;DOM.setStyle(t.id+'_preview','backgroundColor',c);t.value=c;t.hideMenu();t.settings.onselect(c);},postRender:function(){var t=this,id=t.id;t.parent();DOM.add(id+'_action','div',{id:id+'_preview','class':'mceColorPreview'});},destroy:function(){this.parent();Event.clear(this.id+'_menu');Event.clear(this.id+'_more');DOM.remove(this.id+'_menu');}});})();tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container',{renderHTML:function(){var t=this,h='',c,co,dom=tinymce.DOM,s=t.settings,i,pr,nx,cl;cl=t.controls;for(i=0;i<cl.length;i++){co=cl[i];pr=cl[i-1];nx=cl[i+1];if(i===0){c='mceToolbarStart';if(co.Button)c+=' mceToolbarStartButton';else if(co.SplitButton)c+=' mceToolbarStartSplitButton';else if(co.ListBox)c+=' mceToolbarStartListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));}if(pr&&co.ListBox){if(pr.Button||pr.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarEnd'},dom.createHTML('span',null,'<!-- IE -->'));}if(dom.stdMode)h+='<td style="position: relative">'+co.renderHTML()+'</td>';else h+='<td>'+co.renderHTML()+'</td>';if(nx&&co.ListBox){if(nx.Button||nx.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarStart'},dom.createHTML('span',null,'<!-- IE -->'));}}c='mceToolbarEnd';if(co.Button)c+=' mceToolbarEndButton';else if(co.SplitButton)c+=' mceToolbarEndSplitButton';else if(co.ListBox)c+=' mceToolbarEndListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));return dom.createHTML('table',{id:t.id,'class':'mceToolbar'+(s['class']?' '+s['class']:''),cellpadding:'0',cellspacing:'0',align:t.settings.align||''},'<tbody><tr>'+h+'</tr></tbody>');}});(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each;tinymce.create('tinymce.AddOnManager',{items:[],urls:{},lookup:{},onAdd:new Dispatcher(this),get:function(n){return this.lookup[n];},requireLangPack:function(n){var u,s;if(tinymce.EditorManager.settings){u=this.urls[n]+'/langs/'+tinymce.EditorManager.settings.language+'.js';s=tinymce.EditorManager.settings;if(s){if(!tinymce.dom.Event.domLoaded&&!s.strict_mode)tinymce.ScriptLoader.load(u);else tinymce.ScriptLoader.add(u);}}},add:function(id,o){this.items.push(o);this.lookup[id]=o;this.onAdd.dispatch(this,id,o);return o;},load:function(n,u,cb,s){var t=this;if(t.urls[n])return;if(u.indexOf('/')!=0&&u.indexOf('://')==-1)u=tinymce.baseURL+'/'+u;t.urls[n]=u.substring(0,u.lastIndexOf('/'));tinymce.ScriptLoader.add(u,cb,s);}});tinymce.PluginManager=new tinymce.AddOnManager();tinymce.ThemeManager=new tinymce.AddOnManager();}());(function(){var each=tinymce.each,extend=tinymce.extend,DOM=tinymce.DOM,Event=tinymce.dom.Event,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,explode=tinymce.explode;tinymce.create('static tinymce.EditorManager',{editors:{},i18n:{},activeEditor:null,preInit:function(){var t=this,lo=window.location;tinymce.documentBaseURL=lo.href.replace(/[\?#].*$/,'').replace(/[\/\\][^\/]+$/,'');if(!/[\/\\]$/.test(tinymce.documentBaseURL))tinymce.documentBaseURL+='/';tinymce.baseURL=new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);tinymce.EditorManager.baseURI=new tinymce.util.URI(tinymce.baseURL);if(tinymce.EditorManager.baseURI.host!=lo.hostname&&lo.hostname)document.domain=tinymce.relaxedDomain=lo.hostname.replace(/.*\.(.+\..+)$/,'$1');t.onBeforeUnload=new tinymce.util.Dispatcher(t);Event.add(window,'beforeunload',function(e){t.onBeforeUnload.dispatch(t,e);});},init:function(s){var t=this,pl,sl=tinymce.ScriptLoader,c;function execCallback(se,n,s){var f=se[n];if(!f)return;if(tinymce.is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);}return f.apply(s||this,Array.prototype.slice.call(arguments,2));};s=extend({theme:"simple",language:"en",strict_loading_mode:document.contentType=='application/xhtml+xml'},s);t.settings=s;if(!Event.domLoaded&&!s.strict_loading_mode){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');if(s.plugins){pl=explode(s.plugins);if(tinymce.inArray(pl,'compat2x')!=-1)PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');each(pl,function(v){if(v&&v.charAt(0)!='-'&&!PluginManager.urls[v]){if(!tinymce.isWebKit&&v=='safari')return;PluginManager.load(v,'plugins/'+v+'/editor_plugin'+tinymce.suffix+'.js');}});}sl.loadQueue();}Event.add(document,'init',function(){var l,co;execCallback(s,'onpageload');if(s.browsers){l=false;each(explode(s.browsers),function(v){switch(v){case'ie':case'msie':if(tinymce.isIE)l=true;break;case'gecko':if(tinymce.isGecko)l=true;break;case'safari':case'webkit':if(tinymce.isWebKit)l=true;break;case'opera':if(tinymce.isOpera)l=true;break;}});if(!l)return;}switch(s.mode){case"exact":l=s.elements||'';if(l.length>0){each(explode(l),function(v){if(DOM.get(v))new tinymce.Editor(v,s).render(1);else{c=0;each(document.forms,function(f){each(f.elements,function(e){if(e.name===v){v='mce_editor_'+c;DOM.setAttrib(e,'id',v);new tinymce.Editor(v,s).render(1);}});});}});}break;case"textareas":case"specific_textareas":function hasClass(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className);};each(DOM.select('textarea'),function(v){if(s.editor_deselector&&hasClass(v,s.editor_deselector))return;if(!s.editor_selector||hasClass(v,s.editor_selector)){v.id=v.id||v.name;if(!v.id||t.get(v.id))v.id=DOM.uniqueId();new tinymce.Editor(v.id,s).render(1);}});break;}if(s.oninit){l=co=0;each(t.editors,function(ed){co++;if(!ed.initialized){ed.onInit.add(function(){l++;if(l==co)execCallback(s,'oninit');});}else l++;if(l==co)execCallback(s,'oninit');});}});},get:function(id){return this.editors[id];},getInstanceById:function(id){return this.get(id);},add:function(e){this.editors[e.id]=e;this._setActive(e);return e;},remove:function(e){var t=this;if(!t.editors[e.id])return null;delete t.editors[e.id];if(t.activeEditor==e){each(t.editors,function(e){t._setActive(e);return false;});}e.destroy();return e;},execCommand:function(c,u,v){var t=this,ed=t.get(v),w;switch(c){case"mceFocus":ed.focus();return true;case"mceAddEditor":case"mceAddControl":new tinymce.Editor(v,t.settings).render();return true;case"mceAddFrameControl":w=v.window;w.tinyMCE=tinyMCE;w.tinymce=tinymce;tinymce.DOM.doc=w.document;tinymce.DOM.win=w;ed=new tinymce.Editor(v.element_id,v);ed.render();if(tinymce.isIE){function clr(){ed.destroy();w.detachEvent('onunload',clr);w=w.tinyMCE=w.tinymce=null;};w.attachEvent('onunload',clr);}v.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":ed.remove();return true;case'mceToggleEditor':if(!ed){t.execCommand('mceAddControl',0,v);return true;}if(ed.isHidden())ed.show();else ed.hide();return true;}if(t.activeEditor)return t.activeEditor.execCommand(c,u,v);return false;},execInstanceCommand:function(id,c,u,v){var ed=this.get(id);if(ed)return ed.execCommand(c,u,v);return false;},triggerSave:function(){each(this.editors,function(e){e.save();});},addI18n:function(p,o){var lo,i18n=this.i18n;if(!tinymce.is(p,'string')){each(p,function(o,lc){each(o,function(o,g){each(o,function(o,k){if(g==='common')i18n[lc+'.'+k]=o;else i18n[lc+'.'+g+'.'+k]=o;});});});}else{each(o,function(o,k){i18n[p+'.'+k]=o;});}},_setActive:function(e){this.selectedInstance=this.activeEditor=e;}});tinymce.EditorManager.preInit();})();var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,Dispatcher=tinymce.util.Dispatcher;var each=tinymce.each,isGecko=tinymce.isGecko,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit;var is=tinymce.is,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,EditorManager=tinymce.EditorManager;var inArray=tinymce.inArray,grep=tinymce.grep,explode=tinymce.explode;tinymce.create('tinymce.Editor',{Editor:function(id,s){var t=this;t.id=t.editorId=id;t.execCommands={};t.queryStateCommands={};t.queryValueCommands={};t.plugins={};each(['onPreInit','onBeforeRenderUI','onPostRender','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState'],function(e){t[e]=new Dispatcher(t);});t.settings=s=extend({id:id,language:'en',docs_language:'en',theme:'simple',skin:'default',delta_width:0,delta_height:0,popup_css:'',plugins:'',document_base_url:tinymce.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',visual_table_class:'mceItemTable',visual:1,inline_styles:true,convert_fonts_to_spans:true,font_size_style_values:'xx-small,x-small,small,medium,large,x-large,xx-large',apply_source_formatting:1,directionality:'ltr',forced_root_block:'p',valid_elements:'@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote,-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value|_value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:'30px'},s);t.documentBaseURI=new tinymce.util.URI(s.document_base_url||tinymce.documentBaseURL,{base_uri:tinyMCE.baseURI});t.baseURI=EditorManager.baseURI;t.execCallback('setup',t);},render:function(nst){var t=this,s=t.settings,id=t.id,sl=tinymce.ScriptLoader;if(!Event.domLoaded){Event.add(document,'init',function(){t.render();});return;}if(!nst){s.strict_loading_mode=1;tinyMCE.settings=s;}if(!t.getElement())return;if(s.strict_loading_mode){sl.settings.strict_mode=s.strict_loading_mode;tinymce.DOM.settings.strict=1;}if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form'))DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);t.windowManager=new tinymce.WindowManager(t);if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.get)o.content=DOM.encode(o.content);});}if(s.add_form_submit_trigger){t.onSubmit.addToTop(function(){if(t.initialized){t.save();t.isNotDirty=1;}});}if(s.add_unload_trigger){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed)t.save({format:'raw',no_events:true});});}tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n)return;if(n._mceOldSubmit)return;if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){EditorManager.triggerSave();t.isNotDirty=1;return this._mceOldSubmit(this);};}n=null;});}function loadScripts(){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');each(explode(s.plugins),function(p){if(p&&p.charAt(0)!='-'&&!PluginManager.urls[p]){if(!isWebKit&&p=='safari')return;PluginManager.load(p,'plugins/'+p+'/editor_plugin'+tinymce.suffix+'.js');}});sl.loadQueue(function(){if(s.ask){function ask(){t.windowManager.confirm(t.getLang('edit_confirm'),function(s){if(s)t.init();else Event.remove(t.id,'focus',ask);});};Event.add(t.id,'focus',ask);return;}if(!t.removed)t.init();});};if(s.plugins.indexOf('compat2x')!=-1){PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');sl.loadQueue(loadScripts);}else loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,e=t.getElement(),o,ti,u,bi,bc,re;EditorManager.add(t);s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init&&s.init_theme)t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));each(explode(s.plugins.replace(/\-/g,'')),function(p){var c=PluginManager.get(p),u=PluginManager.urls[p]||tinymce.documentBaseURL.replace(/\/$/,''),po;if(c){po=new c(t,u);t.plugins[p]=po;if(po.init)po.init(t,u);}});if(s.popup_css)s.popup_css=t.documentBaseURI.toAbsolute(s.popup_css);else s.popup_css=t.baseURI.toAbsolute("themes/"+s.theme+"/skins/"+s.skin+"/dialog.css");if(s.popup_css_add)s.popup_css+=','+t.documentBaseURI.toAbsolute(s.popup_css_add);t.controlManager=new tinymce.ControlManager(t);t.undoManager=new tinymce.UndoManager(t);t.undoManager.onAdd.add(function(um,l){return t.onChange.dispatch(t,l,um);});t.undoManager.onUndo.add(function(um,l){return t.onUndo.dispatch(t,l,um);});t.undoManager.onRedo.add(function(um,l){return t.onRedo.dispatch(t,l,um);});if(s.custom_undo_redo){t.onExecCommand.add(function(ed,cmd,ui,val,a){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!a||!a.skip_undo))t.undoManager.add();});}t.onExecCommand.add(function(ed,c){if(!/^(FontName|FontSize)$/.test(c))t.nodeChanged();});if(isGecko){function repaint(a,o){if(!o||!o.initial)t.execCommand('mceRepaint');};t.onUndo.add(repaint);t.onRedo.add(repaint);t.onSetContent.add(repaint);}t.onBeforeRenderUI.dispatch(t,t.controlManager);if(s.render_ui){w=s.width||e.style.width||e.clientWidth;h=s.height||e.style.height||e.clientHeight;t.orgDisplay=e.style.display;re=/^[0-9\.]+(|px)$/i;if(re.test(''+w))w=Math.max(parseInt(w)+(o.deltaWidth||0),100);if(re.test(''+h))h=Math.max(parseInt(h)+(o.deltaHeight||0),100);o=t.theme.renderUI({targetNode:e,width:w,height:h,deltaWidth:s.delta_width,deltaHeight:s.delta_height});t.editorContainer=o.editorContainer;}DOM.setStyles(o.sizeContainer||o.editorContainer,{width:w,height:h});h=(o.iframeHeight||h)+((h+'').indexOf('%')==-1?(o.deltaHeight||0):'');if(h<100)h=100;t.iframeHTML=s.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+t.documentBaseURI.getURI()+'"></base>';t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(tinymce.relaxedDomain)t.iframeHTML+='<script type="text/javascript">document.domain = "'+tinymce.relaxedDomain+'";</script>';bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;}bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';}t.iframeHTML+='</head><body id="'+bi+'" class="mceContentBody '+bc+'"></body></html>';if(tinymce.relaxedDomain){if(isIE)u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';else if(tinymce.isOpera)u='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()';}n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',style:{width:'100%',height:h}});t.contentAreaContainer=o.iframeContainer;DOM.get(o.editorContainer).style.display=t.orgDisplay;DOM.get(t.id).style.display='none';if(tinymce.isOldWebKit){Event.add(n,'load',t.setupIframe,t);n.src=tinymce.baseURL+'/plugins/safari/blank.htm';}else{if(!isIE||!tinymce.relaxedDomain)t.setupIframe();e=n=o=null;}},setupIframe:function(){var t=this,s=t.settings,e=DOM.get(t.id),d=t.getDoc(),h,b;if(!isIE||!tinymce.relaxedDomain){d.open();d.write(t.iframeHTML);d.close();}if(!isIE){try{d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);b.contentEditable=true;DOM.show(b);}t.dom=new tinymce.DOM.DOMUtils(t.getDoc(),{keep_values:true,url_converter:t.convertURL,url_converter_scope:t,hex_colors:s.force_hex_style_colors,class_filter:s.class_filter,update_styles:1,fix_ie_paragraphs:1});t.serializer=new tinymce.dom.Serializer({entity_encoding:s.entity_encoding,entities:s.entities,valid_elements:s.verify_html===false?'*[*]':s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,invalid_elements:s.invalid_elements,fix_table_elements:s.fix_table_elements,fix_list_elements:s.fix_list_elements,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans,font_size_classes:s.font_size_classes,font_size_style_values:s.font_size_style_values,apply_source_formatting:s.apply_source_formatting,remove_linebreaks:s.remove_linebreaks,dom:t.dom});t.selection=new tinymce.dom.Selection(t.dom,t.getWin(),t.serializer);t.forceBlocks=new tinymce.ForceBlocks(t,{forced_root_block:s.forced_root_block});t.editorCommands=new tinymce.EditorCommands(t);t.serializer.onPreProcess.add(function(se,o){return t.onPreProcess.dispatch(t,o,se);});t.serializer.onPostProcess.add(function(se,o){return t.onPostProcess.dispatch(t,o,se);});t.onPreInit.dispatch(t);if(!s.gecko_spellcheck)t.getBody().spellcheck=0;t._addEvents();t.controlManager.onPostRender.dispatch(t,t.controlManager);t.onPostRender.dispatch(t);if(s.directionality)t.getBody().dir=s.directionality;if(s.nowrap)t.getBody().style.whiteSpace="nowrap";if(s.auto_resize)t.onNodeChange.add(t.resizeToContent,t);if(s.custom_elements){function handleCustom(ed,o){each(explode(s.custom_elements),function(v){var n;if(v.indexOf('~')===0){v=v.substring(1);n='span';}else n='div';o.content=o.content.replace(new RegExp('<('+v+')([^>]*)>','g'),'<'+n+' mce_name="$1"$2>');o.content=o.content.replace(new RegExp('</('+v+')>','g'),'</'+n+'>');});};t.onBeforeSetContent.add(handleCustom);t.onPostProcess.add(function(ed,o){if(o.set)handleCustom(ed,o)});}if(s.handle_node_change_callback){t.onNodeChange.add(function(ed,cm,n){t.execCallback('handle_node_change_callback',t.id,n,-1,-1,true,t.selection.isCollapsed());});}if(s.save_callback){t.onSaveContent.add(function(ed,o){var h=t.execCallback('save_callback',t.id,o.content,t.getBody());if(h)o.content=h;});}if(s.onchange_callback){t.onChange.add(function(ed,l){t.execCallback('onchange_callback',t,l);});}if(s.convert_newlines_to_brs){t.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/\r?\n/g,'<br />');});}if(s.fix_nesting&&isIE){t.onBeforeSetContent.add(function(ed,o){o.content=t._fixNesting(o.content);});}if(s.preformatted){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^\s*<pre.*?>/,'');o.content=o.content.replace(/<\/pre>\s*$/,'');if(o.set)o.content='<pre class="mceItemHidden">'+o.content+'</pre>';});}if(s.verify_css_classes){t.serializer.attribValueFilter=function(n,v){var s,cl;if(n=='class'){if(!t.classesRE){cl=t.dom.getClasses();if(cl.length>0){s='';each(cl,function(o){s+=(s?'|':'')+o['class'];});t.classesRE=new RegExp('('+s+')','gi');}}return!t.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v)||t.classesRE.test(v)?v:'';}return v;};}if(s.convert_fonts_to_spans)t._convertFonts();if(s.inline_styles)t._convertInlineElements();if(s.cleanup_callback){t.onBeforeSetContent.add(function(ed,o){o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);});t.onPreProcess.add(function(ed,o){if(o.set)t.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get)t.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});t.onPostProcess.add(function(ed,o){if(o.set)o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get)o.content=t.execCallback('cleanup_callback','get_from_editor',o.content,o);});}if(s.save_callback){t.onGetContent.add(function(ed,o){if(o.save)o.content=t.execCallback('save_callback',t.id,o.content,t.getBody());});}if(s.handle_event_callback){t.onEvent.add(function(ed,e,o){if(t.execCallback('handle_event_callback',e,ed,o)===false)Event.cancel(e);});}t.onSetContent.add(function(){t.addVisual(t.getBody());});if(s.padd_empty_editor){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^<p>(&nbsp;|#160;|\s|\u00a0)<\/p>$/,'');});}if(isGecko){try{d.designMode='Off';d.designMode='On';}catch(ex){}}setTimeout(function(){if(t.removed)return;t.load({initial:true,format:(s.cleanup_on_startup?'html':'raw')});t.startContent=t.getContent({format:'raw'});t.undoManager.add({initial:true});t.initialized=true;t.onInit.dispatch(t);t.execCallback('setupcontent_callback',t.id,t.getBody(),t.getDoc());t.execCallback('init_instance_callback',t);t.focus(true);t.nodeChanged({initial:1});if(s.content_css){tinymce.each(explode(s.content_css),function(u){t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));});}if(s.auto_focus){setTimeout(function(){var ed=EditorManager.get(s.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getWin().focus();},100);}},1);e=null;},focus:function(sf){var oed,t=this;if(!sf){t.getWin().focus();}if(EditorManager.activeEditor!=t){if((oed=EditorManager.activeEditor)!=null)oed.onDeactivate.dispatch(oed,t);t.onActivate.dispatch(t,oed);}EditorManager._setActive(t);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f)return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;}if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};}return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language,i18n=EditorManager.i18n;if(!s)return'';return i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return EditorManager.i18n[this.settings.language+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1)o[tr(v[0])]=tr(v[1]);else o[tr(v[0])]=tr(v);});}else o=v;return o;}return v;},nodeChanged:function(o){var t=this,s=t.selection,n=s.getNode()||t.getBody();if(t.initialized){t.onNodeChange.dispatch(t,o?o.controlManager||t.controlManager:t.controlManager,isIE&&n.ownerDocument!=t.getDoc()?t.getBody():n,s.isCollapsed(),o);}},addButton:function(n,s){var t=this;t.buttons=t.buttons||{};t.buttons[n]=s;},addCommand:function(n,f,s){this.execCommands[n]={func:f,scope:s||this};},addQueryStateHandler:function(n,f,s){this.queryStateCommands[n]={func:f,scope:s||this};},addQueryValueHandler:function(n,f,s){this.queryValueCommands[n]={func:f,scope:s||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(!t.settings.custom_shortcuts)return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};}if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};}each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:desc,alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus))t.focus();o={};t.onBeforeExecCommand.dispatch(t,cmd,ui,val,o);if(o.terminate)return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(o=t.execCommands[cmd]){s=o.func.call(o.scope,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);return s;}each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s)return true;if(t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(c){var t=this,o;if(t._isHidden())return;if(o=t.queryStateCommands[c])return o.func.call(o.scope);o=t.editorCommands.queryCommandState(c);if(o!==-1)return o;try{return this.getDoc().queryCommandState(c);}catch(ex){}},queryCommandValue:function(c){var t=this,o;if(t._isHidden())return;if(o=t.queryValueCommands[c])return o.func.call(o.scope);o=t.editorCommands.queryCommandValue(c);if(is(o))return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var t=this;DOM.show(t.getContainer());DOM.hide(t.id);t.load();},hide:function(){var t=this,d=t.getDoc();if(isIE&&d)d.execCommand('SelectAll');t.save();DOM.hide(t.getContainer());DOM.setStyle(t.id,'display',t.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},resizeToContent:function(){var t=this;DOM.setStyle(t.id+"_ifr",'height',t.getBody().scrollHeight);},load:function(o){var t=this,e=t.getElement(),h;o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events)t.onLoadContent.dispatch(t,o);o.element=e=null;return h;},save:function(o){var t=this,e=t.getElement(),h,f;if(!t.initialized)return;o=o||{};o.save=true;o.element=e;h=o.content=t.getContent(o);if(!o.no_events)t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else e.value=h;o.element=e=null;return h;},setContent:function(h,o){var t=this;o=o||{};o.format=o.format||'html';o.set=true;o.content=h;if(!o.no_events)t.onBeforeSetContent.dispatch(t,o);if(!tinymce.isIE&&(h.length===0||/^\s+$/.test(h))){o.content=t.dom.setHTML(t.getBody(),'<br mce_bogus="1" />',1);o.format='raw';}o.content=t.dom.setHTML(t.getBody(),tinymce.trim(o.content));if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;o.content=t.dom.setHTML(t.getBody(),t.serializer.serialize(t.getBody(),o));}if(!o.no_events)t.onSetContent.dispatch(t,o);return o.content;},getContent:function(o){var t=this,h;o=o||{};o.format=o.format||'html';o.get=true;if(!o.no_events)t.onBeforeGetContent.dispatch(t,o);if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;h=t.serializer.serialize(t.getBody(),o);}else h=t.getBody().innerHTML;h=h.replace(/^\s*|\s*$/g,'');o={content:h};t.onGetContent.dispatch(t,o);return o.content;},isDirty:function(){var t=this;return tinymce.trim(t.startContent)!=tinymce.trim(t.getContent({format:'raw',no_events:1}))&&!t.isNotDirty;},getContainer:function(){var t=this;if(!t.container)t.container=DOM.get(t.editorContainer||t.id+'_parent');return t.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var t=this,e;if(!t.contentWindow){e=DOM.get(t.id+"_ifr");if(e)t.contentWindow=e.contentWindow;}return t.contentWindow;},getDoc:function(){var t=this,w;if(!t.contentDocument){w=t.getWin();if(w)t.contentDocument=w.document;}return t.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(u,n,e){var t=this,s=t.settings;if(s.urlconverter_callback)return t.execCallback('urlconverter_callback',u,e,true,n);if(!s.convert_urls||(e&&e.nodeName=='LINK')||u.indexOf('file:')===0)return u;if(s.relative_urls)return t.documentBaseURI.toRelative(u);u=t.documentBaseURI.toAbsolute(u,s.remove_script_host);return u;},addVisual:function(e){var t=this,s=t.settings;e=e||t.getBody();if(!is(t.hasVisual))t.hasVisual=s.visual;each(t.dom.select('table,a',e),function(e){var v;switch(e.nodeName){case'TABLE':v=t.dom.getAttrib(e,'border');if(!v||v=='0'){if(t.hasVisual)t.dom.addClass(e,s.visual_table_class);else t.dom.removeClass(e,s.visual_table_class);}return;case'A':v=t.dom.getAttrib(e,'name');if(v){if(t.hasVisual)t.dom.addClass(e,'mceItemAnchor');else t.dom.removeClass(e,'mceItemAnchor');}return;}});t.onVisualAid.dispatch(t,e,t.hasVisual);},remove:function(){var t=this,e=t.getContainer();t.removed=1;t.hide();t.execCallback('remove_instance_callback',t);t.onRemove.dispatch(t);t.onExecCommand.listeners=[];EditorManager.remove(t);DOM.remove(e);},destroy:function(s){var t=this;if(t.destroyed)return;if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme.destroy)t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();Event.clear(t.getWin());Event.clear(t.getDoc());Event.clear(t.getBody());Event.clear(t.formElement);}if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;}t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection)t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_addEvents:function(){var t=this,i,s=t.settings,lo={mouseup:'onMouseUp',mousedown:'onMouseDown',click:'onClick',keyup:'onKeyUp',keydown:'onKeyDown',keypress:'onKeyPress',submit:'onSubmit',reset:'onReset',contextmenu:'onContextMenu',dblclick:'onDblClick',paste:'onPaste'};function eventHandler(e,o){var ty=e.type;if(t.removed)return;if(t.onEvent.dispatch(t,e,o)!==false){t[lo[e.fakeType||e.type]].dispatch(t,e,o);}};each(lo,function(v,k){switch(k){case'contextmenu':if(tinymce.isOpera){Event.add(t.getDoc(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getDoc(),k,eventHandler);break;case'paste':Event.add(t.getBody(),k,function(e){var tx,h,el,r;if(e.clipboardData)tx=e.clipboardData.getData('text/plain');else if(tinymce.isIE)tx=t.getWin().clipboardData.getData('Text');eventHandler(e,{text:tx,html:h});});break;case'submit':case'reset':Event.add(t.getElement().form||DOM.getParent(t.id,'form'),k,eventHandler);break;default:Event.add(s.content_editable?t.getBody():t.getDoc(),k,eventHandler);}});Event.add(s.content_editable?t.getBody():(isGecko?t.getDoc():t.getWin()),'focus',function(e){t.focus(true);});if(tinymce.isGecko){Event.add(t.getDoc(),'DOMNodeInserted',function(e){var v;e=e.target;if(e.nodeType===1&&e.nodeName==='IMG'&&(v=e.getAttribute('mce_src')))e.src=t.documentBaseURI.toAbsolute(v);});}if(isGecko){function setOpts(){var t=this,d=t.getDoc(),s=t.settings;if(isGecko){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())d.execCommand("useCSS",0,true);}if(!s.table_inline_editing)try{d.execCommand('enableInlineTableEditing',false,false);}catch(ex){}if(!s.object_resizing)try{d.execCommand('enableObjectResizing',false,false);}catch(ex){}}};t.onBeforeExecCommand.add(setOpts);t.onMouseDown.add(setOpts);}t.onMouseUp.add(t.nodeChanged);t.onClick.add(t.nodeChanged);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.keyCode==46||e.keyCode==8||e.ctrlKey)t.nodeChanged();});t.onReset.add(function(){t.setContent(t.startContent,{format:'raw'});});if(t.getParam('tab_focus')){function tabCancel(ed,e){if(e.keyCode===9)return Event.cancel(e);};function tabHandler(ed,e){var x,i,f,el,v;function find(d){f=DOM.getParent(ed.id,'form');el=f.elements;if(f){each(el,function(e,i){if(e.id==ed.id){x=i;return false;}});if(d>0){for(i=x+1;i<el.length;i++){if(el[i].type!='hidden')return el[i];}}else{for(i=x-1;i>=0;i--){if(el[i].type!='hidden')return el[i];}}}return null;};if(e.keyCode===9){v=explode(ed.getParam('tab_focus'));if(v.length==1){v[1]=v[0];v[0]=':prev';}if(e.shiftKey){if(v[0]==':prev')el=find(-1);else el=DOM.get(v[0]);}else{if(v[1]==':next')el=find(1);else el=DOM.get(v[1]);}if(el){if(ed=EditorManager.get(el.id||el.name))ed.focus();else window.setTimeout(function(){window.focus();el.focus();},10);return Event.cancel(e);}}};t.onKeyUp.add(tabCancel);if(isGecko){t.onKeyPress.add(tabHandler);t.onKeyDown.add(tabCancel);}else t.onKeyDown.add(tabHandler);}if(s.custom_shortcuts){if(s.custom_undo_redo_keyboard_shortcuts){t.addShortcut('ctrl+z',t.getLang('undo_desc'),'Undo');t.addShortcut('ctrl+y',t.getLang('redo_desc'),'Redo');}if(isGecko){t.addShortcut('ctrl+b',t.getLang('bold_desc'),'Bold');t.addShortcut('ctrl+i',t.getLang('italic_desc'),'Italic');t.addShortcut('ctrl+u',t.getLang('underline_desc'),'Underline');}for(i=1;i<=6;i++)t.addShortcut('ctrl+'+i,'',['FormatBlock',false,'<h'+i+'>']);t.addShortcut('ctrl+7','',['FormatBlock',false,'<p>']);t.addShortcut('ctrl+8','',['FormatBlock',false,'<div>']);t.addShortcut('ctrl+9','',['FormatBlock',false,'<address>']);function find(e){var v=null;if(!e.altKey&&!e.ctrlKey&&!e.metaKey)return v;each(t.shortcuts,function(o){if(o.ctrl!=e.ctrlKey&&(!tinymce.isMac||o.ctrl==e.metaKey))return;if(o.alt!=e.altKey)return;if(o.shift!=e.shiftKey)return;if(e.keyCode==o.keyCode||(e.charCode&&e.charCode==o.charCode)){v=o;return false;}});return v;};t.onKeyUp.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyPress.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyDown.add(function(ed,e){var o=find(e);if(o){o.func.call(o.scope);return Event.cancel(e);}});}if(tinymce.isIE){Event.add(t.getDoc(),'controlselect',function(e){var re=t.resizeInfo,cb;e=e.target;e.removeAttribute('mce_style');if(e.nodeName!=='IMG')return;if(re)Event.remove(re.node,re.ev,re.cb);if(!t.dom.hasClass(e,'mceItemNoResize')){ev='resizeend';cb=Event.add(e,ev,function(e){var v;e=e.target;if(v=t.dom.getStyle(e,'width')){t.dom.setAttrib(e,'width',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'width','');}if(v=t.dom.getStyle(e,'height')){t.dom.setAttrib(e,'height',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'height','');}});}else{ev='resizestart';cb=Event.add(e,'resizestart',Event.cancel,Event);}re=t.resizeInfo={node:e,ev:ev,cb:cb};});t.onKeyDown.add(function(ed,e){switch(e.keyCode){case 8:if(t.selection.getRng().item){t.selection.getRng().item(0).removeNode();return Event.cancel(e);}}});}if(tinymce.isOpera){t.onClick.add(function(ed,e){Event.prevent(e);});}if(s.custom_undo_redo){function addUndo(){t.undoManager.typing=0;t.undoManager.add();};if(tinymce.isIE){Event.add(t.getWin(),'blur',function(e){var n;if(t.selection){n=t.selection.getNode();if(!t.removed&&n.ownerDocument&&n.ownerDocument!=t.getDoc())addUndo();}});}else{Event.add(t.getDoc(),'blur',function(){if(t.selection&&!t.removed)addUndo();});}t.onMouseDown.add(addUndo);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.ctrlKey){t.undoManager.typing=0;t.undoManager.add();}});t.onKeyDown.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45){if(t.undoManager.typing){t.undoManager.add();t.undoManager.typing=0;}return;}if(!t.undoManager.typing){t.undoManager.add();t.undoManager.typing=1;}});}},_convertInlineElements:function(){var t=this,s=t.settings,dom=t.dom,v,e,na,st,sp;function convert(ed,o){if(!s.inline_styles)return;if(o.get){each(t.dom.select('table,u,strike',o.node),function(n){switch(n.nodeName){case'TABLE':if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height','');}break;case'U':case'STRIKE':sp=dom.create('span',{style:dom.getAttrib(n,'style')});sp.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);break;}});}else if(o.set){each(t.dom.select('table,span',o.node),function(n){if(n.nodeName=='TABLE'){if(v=dom.getStyle(n,'height'))dom.setAttrib(n,'height',v.replace(/[^0-9%]+/g,''));}else{if(n.style.textDecoration=='underline')na='u';else if(n.style.textDecoration=='line-through')na='strike';else na='';if(na){n.style.textDecoration='';dom.setAttrib(n,'mce_style','');e=dom.create(na,{style:dom.getAttrib(n,'style')});dom.replace(e,n,1);}}});}};t.onPreProcess.add(convert);if(!s.cleanup_on_startup){t.onInit.add(function(){convert(t,{node:t.getBody(),set:1});});}},_convertFonts:function(){var t=this,s=t.settings,dom=t.dom,fz,fzn,sl,cl;if(!s.inline_styles)return;fz=[8,10,12,14,18,24,36];fzn=['xx-small','x-small','small','medium','large','x-large','xx-large'];if(sl=s.font_size_style_values)sl=explode(sl);if(cl=s.font_size_classes)cl=explode(cl);function convertToFonts(no){var n,f,nl,x,i,v,st;if(tinymce.isWebKit||!s.inline_styles)return;nl=t.dom.select('span',no);for(x=nl.length-1;x>=0;x--){n=nl[x];f=dom.create('font',{color:dom.toHex(dom.getStyle(n,'color')),face:dom.getStyle(n,'fontFamily'),style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});st=f.style;if(st.color||st.fontFamily){st.color=st.fontFamily='';dom.setAttrib(f,'mce_style','');}if(sl){i=inArray(sl,dom.getStyle(n,'fontSize'));if(i!=-1){dom.setAttrib(f,'size',''+(i+1||1));f.style.fontSize='';}}else if(cl){i=inArray(cl,dom.getAttrib(n,'class'));v=dom.getStyle(n,'fontSize');if(i==-1&&v.indexOf('pt')>0)i=inArray(fz,parseInt(v));if(i==-1)i=inArray(fzn,v);if(i!=-1){dom.setAttrib(f,'size',''+(i+1||1));f.style.fontSize='';}}if(f.color||f.face||f.size){f.style.fontFamily='';dom.setAttrib(f,'mce_style','');dom.replace(f,n,1);}f=n=null;}};t.onSetContent.add(function(ed,o){convertToFonts(ed.getBody());});t.onPreProcess.add(function(ed,o){var n,sp,nl,x;if(!s.inline_styles)return;if(o.get){nl=t.dom.select('font',o.node);for(x=nl.length-1;x>=0;x--){n=nl[x];sp=dom.create('span',{style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});dom.setStyles(sp,{fontFamily:dom.getAttrib(n,'face'),color:dom.getAttrib(n,'color'),backgroundColor:n.style.backgroundColor});if(n.size){if(sl)dom.setStyle(sp,'fontSize',sl[parseInt(n.size)-1]);else dom.setAttrib(sp,'class',cl[parseInt(n.size)-1]);}dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);}}});},_isHidden:function(){var s;if(!isGecko)return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},_fixNesting:function(s){var d=[],i;s=s.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(a,b,c){var e;if(b==='/'){if(!d.length)return'';if(c!==d[d.length-1].tag){for(i=d.length-1;i>=0;i--){if(d[i].tag===c){d[i].close=1;break;}}return'';}else{d.pop();if(d.length&&d[d.length-1].close){a=a+'</'+d[d.length-1].tag+'>';d.pop();}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(c))return a;if(/\/>$/.test(a))return a;d.push({tag:c});}return a;});for(i=d.length-1;i>=0;i--)s+='</'+d[i].tag+'>';return s;}});})();(function(){var each=tinymce.each,isIE=tinymce.isIE,isGecko=tinymce.isGecko,isOpera=tinymce.isOpera,isWebKit=tinymce.isWebKit;tinymce.create('tinymce.EditorCommands',{EditorCommands:function(ed){this.editor=ed;},execCommand:function(cmd,ui,val){var t=this,ed=t.editor,f;switch(cmd){case'Cut':case'Copy':case'Paste':try{ed.getDoc().execCommand(cmd,ui,val);}catch(ex){if(isGecko){ed.windowManager.confirm(ed.getLang('clipboard_msg'),function(s){if(s)window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');});}else ed.windowManager.alert(ed.getLang('clipboard_no_support'));}return true;case'mceResetDesignMode':case'mceBeginUndoLevel':return true;case'unlink':t.UnLink();return true;case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':t.mceJustify(cmd,cmd.substring(7).toLowerCase());return true;case'mceEndUndoLevel':case'mceAddUndoLevel':ed.undoManager.add();return true;default:f=this[cmd];if(f){f.call(this,ui,val);return true;}}return false;},Indent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){d.setStyle(e,'paddingLeft',(parseInt(e.style.paddingLeft||0)+iv)+iu);});return;}ed.getDoc().execCommand('Indent',false,null);if(isIE){d.getParent(s.getNode(),function(n){if(n.nodeName=='BLOCKQUOTE'){n.dir=n.style.cssText='';}});}},Outdent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,v,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){v=Math.max(0,parseInt(e.style.paddingLeft||0)-iv);d.setStyle(e,'paddingLeft',v?v+iu:'');});return;}ed.getDoc().execCommand('Outdent',false,null);},mceSetAttribute:function(u,v){var ed=this.editor,d=ed.dom,e;if(e=d.getParent(ed.selection.getNode(),d.isBlock))d.setAttrib(e,v.name,v.value);},mceSetContent:function(u,v){this.editor.setContent(v);},mceToggleVisualAid:function(){var ed=this.editor;ed.hasVisual=!ed.hasVisual;ed.addVisual();},mceReplaceContent:function(u,v){var s=this.editor.selection;s.setContent(v.replace(/\{\$selection\}/g,s.getContent({format:'text'})));},mceInsertLink:function(u,v){var ed=this.editor,e=ed.dom.getParent(ed.selection.getNode(),'A');if(tinymce.is(v,'string'))v={href:v};function set(e){each(v,function(v,k){ed.dom.setAttrib(e,k,v);});};if(!e){ed.execCommand('CreateLink',false,'javascript:mctmp(0);');each(ed.dom.select('a'),function(e){if(e.href=='javascript:mctmp(0);')set(e);});}else{if(v.href)set(e);else ed.dom.remove(e,1);}},UnLink:function(){var ed=this.editor,s=ed.selection;if(s.isCollapsed())s.select(s.getNode());ed.getDoc().execCommand('unlink',false,null);s.collapse(0);},FontName:function(u,v){var t=this,ed=t.editor,s=ed.selection,e;if(!v){if(s.isCollapsed())s.select(s.getNode());t.RemoveFormat();}else ed.getDoc().execCommand('FontName',false,v);},queryCommandValue:function(c){var f=this['queryValue'+c];if(f)return f.call(this,c);return false;},queryCommandState:function(cmd){var f;switch(cmd){case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':return this.queryStateJustify(cmd,cmd.substring(7).toLowerCase());default:if(f=this['queryState'+cmd])return f.call(this,cmd);}return-1;},_queryState:function(c){try{return this.editor.getDoc().queryCommandState(c);}catch(ex){}},_queryVal:function(c){try{return this.editor.getDoc().queryCommandValue(c);}catch(ex){}},queryValueFontSize:function(){var ed=this.editor,v=0,p;if(isOpera||isWebKit){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return this._queryVal('FontSize');},queryValueFontName:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.face;if(!v)v=this._queryVal('FontName');return v;},mceJustify:function(c,v){var ed=this.editor,se=ed.selection,n=se.getNode(),nn=n.nodeName,bl,nb,dom=ed.dom,rm;if(ed.settings.inline_styles&&this.queryStateJustify(c,v))rm=1;bl=dom.getParent(n,ed.dom.isBlock);if(nn=='IMG'){if(v=='full')return;if(rm){if(v=='center')dom.setStyle(n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(/^(TD|TH)$/.test(bl.nodeName))bl=0;if(!bl||bl.childNodes.length>1){nb=dom.create('p');nb.appendChild(n.cloneNode(false));if(bl)dom.insertAfter(nb,bl);else dom.insertAfter(nb,n);dom.remove(n);n=nb.firstChild;bl=nb;}dom.setStyle(bl,'textAlign',v);dom.setStyle(n,'float','');}else{dom.setStyle(n,'float',v);dom.setStyle(n.parentNode,'textAlign','');}this.mceRepaint();return;}if(ed.settings.inline_styles&&ed.settings.forced_root_block){if(rm)v='';each(this._getSelectedBlocks(dom.getParent(se.getStart(),dom.isBlock),dom.getParent(se.getEnd(),dom.isBlock)),function(e){dom.setAttrib(e,'align','');dom.setStyle(e,'textAlign',v=='full'?'justify':v);});return;}else if(!rm)ed.getDoc().execCommand(c,false,null);if(ed.settings.inline_styles){if(rm){dom.getParent(ed.selection.getNode(),function(n){if(n.style&&n.style.textAlign)dom.setStyle(n,'textAlign','');});return;}each(dom.select('*'),function(n){var v=n.align;if(v){if(v=='full')v='justify';dom.setStyle(n,'textAlign',v);dom.setAttrib(n,'align','');}});}},mceSetCSSClass:function(u,v){this.mceSetStyleInfo(0,{command:'setattrib',name:'class',value:v});},getSelectedElement:function(){var t=this,ed=t.editor,dom=ed.dom,se=ed.selection,r=se.getRng(),r1,r2,sc,ec,so,eo,e,sp,ep,re;if(se.isCollapsed()||r.item)return se.getNode();re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(isIE){r1=r.duplicate();r1.collapse(true);sc=r1.parentElement();r2=r.duplicate();r2.collapse(false);ec=r2.parentElement();if(sc!=ec){r1.move('character',1);sc=r1.parentElement();}if(sc==ec){r1=r.duplicate();r1.moveToElementText(sc);if(r1.compareEndPoints('StartToStart',r)==0&&r1.compareEndPoints('EndToEnd',r)==0)return re&&re.test(sc.nodeName)?null:sc;}}else{function getParent(n){return dom.getParent(n,function(n){return n.nodeType==1;});};sc=r.startContainer;ec=r.endContainer;so=r.startOffset;eo=r.endOffset;if(!r.collapsed){if(sc==ec){if(so-eo<2){if(sc.hasChildNodes()){sp=sc.childNodes[so];return re&&re.test(sp.nodeName)?null:sp;}}}}if(sc.nodeType!=3||ec.nodeType!=3)return null;if(so==0){sp=getParent(sc);if(sp&&sp.firstChild!=sc)sp=null;}if(so==sc.nodeValue.length){e=sc.nextSibling;if(e&&e.nodeType==1)sp=sc.nextSibling;}if(eo==0){e=ec.previousSibling;if(e&&e.nodeType==1)ep=e;}if(eo==ec.nodeValue.length){ep=getParent(ec);if(ep&&ep.lastChild!=ec)ep=null;}if(sp==ep)return re&&sp&&re.test(sp.nodeName)?null:sp;}return null;},InsertHorizontalRule:function(){if(isGecko||isIE)this.editor.selection.setContent('<hr />');else this.editor.getDoc().execCommand('InsertHorizontalRule',false,'');},RemoveFormat:function(){var t=this,ed=t.editor,s=ed.selection,b;if(isWebKit)s.setContent(s.getContent({format:'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g,''),{format:'raw'});else ed.getDoc().execCommand('RemoveFormat',false,null);t.mceSetStyleInfo(0,{command:'removeformat'});ed.addVisual();},mceSetStyleInfo:function(u,v){var t=this,ed=t.editor,d=ed.getDoc(),dom=ed.dom,e,b,s=ed.selection,nn=v.wrapper||'span',b=s.getBookmark(),re;function set(n,e){if(n.nodeType==1){switch(v.command){case'setattrib':return dom.setAttrib(n,v.name,v.value);case'setstyle':return dom.setStyle(n,v.name,v.value);case'removeformat':return dom.setAttrib(n,'class','');}}};re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(e=t.getSelectedElement())set(e,1);else{d.execCommand('FontName',false,'__');each(isWebKit?dom.select('span'):dom.select('font'),function(n){var sp,e;if(dom.getAttrib(n,'face')=='__'||n.style.fontFamily==='__'){sp=dom.create(nn,{mce_new:'1'});set(sp);each(n.childNodes,function(n){sp.appendChild(n.cloneNode(true));});dom.replace(sp,n);}});}each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!dom.getAttrib(n,'mce_new')){p=dom.getParent(n,function(n){return n.nodeType==1&&dom.getAttrib(n,'mce_new');});if(p)dom.remove(n,1);}});each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!p||!dom.getAttrib(n,'mce_new'))return;if(p.nodeName==nn.toUpperCase()&&p.childNodes.length==1)return dom.remove(p,1);if(n.nodeType==1&&(!re||!re.test(p.nodeName))&&p.childNodes.length==1){set(p);dom.setAttrib(n,'class','');}});each(dom.select(nn).reverse(),function(n){if(dom.getAttrib(n,'mce_new')||(dom.getAttribs(n).length<=1&&n.className==='')){if(!dom.getAttrib(n,'class')&&!dom.getAttrib(n,'style'))return dom.remove(n,1);dom.setAttrib(n,'mce_new','');}});s.moveToBookmark(b);},queryStateJustify:function(c,v){var ed=this.editor,n=ed.selection.getNode(),dom=ed.dom;if(n&&n.nodeName=='IMG'){if(dom.getStyle(n,'float')==v)return 1;return n.parentNode.style.textAlign==v;}n=dom.getParent(ed.selection.getStart(),function(n){return n.nodeType==1&&n.style.textAlign;});if(v=='full')v='justify';if(ed.settings.inline_styles)return(n&&n.style.textAlign==v);return this._queryState(c);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();function set(s){if(!isGecko)return;try{d.execCommand("styleWithCSS",0,s);}catch(ex){d.execCommand("useCSS",0,!s);}};if(isGecko||isOpera){set(true);d.execCommand('hilitecolor',false,val);set(false);}else d.execCommand('BackColor',false,val);},Undo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.undo();ed.nodeChanged();}else ed.getDoc().execCommand('Undo',false,null);},Redo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.redo();ed.nodeChanged();}else ed.getDoc().execCommand('Redo',false,null);},FormatBlock:function(ui,val){var t=this,ed=t.editor;val=ed.settings.forced_root_block?(val||'<p>'):val;if(/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(ed.selection.getNode().nodeName))t.mceRemoveNode();if(val.indexOf('<')==-1)val='<'+val+'>';if(tinymce.isGecko)val=val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,'$1');ed.getDoc().execCommand('FormatBlock',false,val);},mceCleanup:function(){var ed=this.editor,s=ed.selection,b=s.getBookmark();ed.setContent(ed.getContent());s.moveToBookmark(b);},mceRemoveNode:function(ui,val){var ed=this.editor,s=ed.selection,b,n=val||s.getNode();if(n==ed.getBody())return;b=s.getBookmark();ed.dom.remove(n,1);s.moveToBookmark(b);ed.nodeChanged();},mceSelectNodeDepth:function(ui,val){var ed=this.editor,s=ed.selection,c=0;ed.dom.getParent(s.getNode(),function(n){if(n.nodeType==1&&c++==val){s.select(n);ed.nodeChanged();return false;}},ed.getBody());},mceSelectNode:function(u,v){this.editor.selection.select(v);},mceInsertContent:function(ui,val){this.editor.selection.setContent(val);},mceInsertRawHTML:function(ui,val){var ed=this.editor;ed.selection.setContent('tiny_mce_marker');ed.setContent(ed.getContent().replace(/tiny_mce_marker/g,val));},mceRepaint:function(){var s,b,e=this.editor;if(tinymce.isGecko){try{s=e.selection;b=s.getBookmark(true);if(s.getSel())s.getSel().selectAllChildren(e.getBody());s.collapse(true);s.moveToBookmark(b);}catch(ex){}}},queryStateUnderline:function(){var ed=this.editor,n;if(n&&n.nodeName=='A')return false;return this._queryState('Underline');},queryStateOutdent:function(){var ed=this.editor,n;if(ed.settings.inline_styles){if((n=ed.dom.getParent(ed.selection.getStart(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;if((n=ed.dom.getParent(ed.selection.getEnd(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;}else return!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE');return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList();},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'UL');},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'OL');},queryStatemceBlockQuote:function(){return!!this.editor.dom.getParent(this.editor.selection.getStart(),function(n){return n.nodeName==='BLOCKQUOTE';});},mceBlockQuote:function(){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,sb,eb,n,bm,bq,r,bq2,i,nl;function getBQ(e){return dom.getParent(e,function(n){return n.nodeName==='BLOCKQUOTE';});};sb=dom.getParent(s.getStart(),dom.isBlock);eb=dom.getParent(s.getEnd(),dom.isBlock);if(bq=getBQ(sb)){if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();if(getBQ(eb)){bq2=bq.cloneNode(false);while(n=eb.nextSibling)bq2.appendChild(n.parentNode.removeChild(n));}if(bq2)dom.insertAfter(bq2,bq);nl=t._getSelectedBlocks(sb,eb);for(i=nl.length-1;i>=0;i--){dom.insertAfter(nl[i],bq);}if(/^\s*$/.test(bq.innerHTML))dom.remove(bq,1);if(bq2&&/^\s*$/.test(bq2.innerHTML))dom.remove(bq2,1);if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(0);if(dom.getParent(s.getStart(),dom.isBlock)!=sb){r=s.getRng();r.move('character',-1);r.select();}}}else t.editor.selection.moveToBookmark(bm);return;}if(isIE&&!sb&&!eb){t.editor.getDoc().execCommand('Indent');n=getBQ(s.getNode());n.style.margin=n.dir='';return;}if(!sb||!eb)return;if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();each(t._getSelectedBlocks(getBQ(s.getStart()),getBQ(s.getEnd())),function(e){if(e.nodeName=='BLOCKQUOTE'&&!bq){bq=e;return;}if(!bq){bq=dom.create('blockquote');e.parentNode.insertBefore(bq,e);}if(e.nodeName=='BLOCKQUOTE'&&bq){n=e.firstChild;while(n){bq.appendChild(n.cloneNode(true));n=n.nextSibling;}dom.remove(e);return;}bq.appendChild(dom.remove(e));});if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(1);}}else s.moveToBookmark(bm);},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),dom.isBlock);eb=dom.getParent(en||s.getEnd(),dom.isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(dom.isBlock(n))bl.push(n);}}if(eb&&sb!=eb)bl.push(eb);return bl;}});})();tinymce.create('tinymce.UndoManager',{index:0,data:null,typing:0,UndoManager:function(ed){var t=this,Dispatcher=tinymce.util.Dispatcher;t.editor=ed;t.data=[];t.onAdd=new Dispatcher(this);t.onUndo=new Dispatcher(this);t.onRedo=new Dispatcher(this);},add:function(l){var t=this,i,ed=t.editor,b,s=ed.settings,la;l=l||{};l.content=l.content||ed.getContent({format:'raw',no_events:1});l.content=l.content.replace(/^\s*|\s*$/g,'');la=t.data[t.index>0?t.index-1:0];if(!l.initial&&la&&l.content==la.content)return null;if(s.custom_undo_redo_levels){if(t.data.length>s.custom_undo_redo_levels){for(i=0;i<t.data.length-1;i++)t.data[i]=t.data[i+1];t.data.length--;t.index=t.data.length;}}if(s.custom_undo_redo_restore_selection&&!l.initial)l.bookmark=b=l.bookmark||ed.selection.getBookmark();if(t.index<t.data.length&&t.data[t.index].initial)t.index++;t.data.length=t.index+1;t.data[t.index++]=l;if(l.initial)t.index=0;if(t.data.length==2&&t.data[0].initial)t.data[0].bookmark=b;t.onAdd.dispatch(t,l);ed.isNotDirty=0;return l;},undo:function(){var t=this,ed=t.editor,l=l,i;if(t.typing){t.add();t.typing=0;}if(t.index>0){if(t.index==t.data.length&&t.index>1){i=t.index;t.typing=0;if(!t.add())t.index=i;--t.index;}l=t.data[--t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onUndo.dispatch(t,l);}return l;},redo:function(){var t=this,ed=t.editor,l=null;if(t.index<t.data.length-1){l=t.data[++t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onRedo.dispatch(t,l);}return l;},clear:function(){var t=this;t.data=[];t.index=0;t.typing=0;t.add({initial:true});},hasUndo:function(){return this.index!=0||this.typing;},hasRedo:function(){return this.index<this.data.length-1;}});(function(){var Event,isIE,isGecko,isOpera,each,extend;Event=tinymce.dom.Event;isIE=tinymce.isIE;isGecko=tinymce.isGecko;isOpera=tinymce.isOpera;each=tinymce.each;extend=tinymce.extend;tinymce.create('tinymce.ForceBlocks',{ForceBlocks:function(ed){var t=this,s=ed.settings,elm;t.editor=ed;t.dom=ed.dom;elm=(s.forced_root_block||'p').toLowerCase();s.element=elm.toUpperCase();ed.onPreInit.add(t.setup,t);t.reOpera=new RegExp('(\\u00a0|&#160;|&nbsp;)<\/'+elm+'>','gi');t.rePadd=new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR1=new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR2=new RegExp('<p( )([^>]+)>(&nbsp;|&#160;)<\\\/p>|<p>(&nbsp;|&#160;)<\\\/p>'.replace(/p/g,elm),'gi');t.reBR2Nbsp=new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');t.reTrailBr=new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');function padd(ed,o){if(isOpera)o.content=o.content.replace(t.reOpera,'</'+elm+'>');o.content=o.content.replace(t.rePadd,'<'+elm+'$1$2$3$4$5$6>\u00a0</'+elm+'>');if(!isIE&&!isOpera&&o.set){o.content=o.content.replace(t.reNbsp2BR1,'<'+elm+'$1$2><br /></'+elm+'>');o.content=o.content.replace(t.reNbsp2BR2,'<'+elm+'$1$2><br /></'+elm+'>');}else{o.content=o.content.replace(t.reBR2Nbsp,'<'+elm+'$1$2>\u00a0</'+elm+'>');o.content=o.content.replace(t.reTrailBr,'</'+elm+'>');}};ed.onBeforeSetContent.add(padd);ed.onPostProcess.add(padd);if(s.forced_root_block){ed.onInit.add(t.forceRoots,t);ed.onSetContent.add(t.forceRoots,t);ed.onBeforeGetContent.add(t.forceRoots,t);}},setup:function(){var t=this,ed=t.editor,s=ed.settings;if(s.forced_root_block){ed.onKeyUp.add(t.forceRoots,t);ed.onPreProcess.add(t.forceRoots,t);}if(s.force_br_newlines){if(isIE){ed.onKeyPress.add(function(ed,e){var n,s=ed.selection;if(e.keyCode==13&&s.getNode().nodeName!='LI'){s.setContent('<br id="__" /> ',{format:'raw'});n=ed.dom.get('__');n.removeAttribute('id');s.select(n);s.collapse();return Event.cancel(e);}});}return;}if(!isIE&&s.force_p_newlines){ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&!e.shiftKey){if(!t.insertPara(e))Event.cancel(e);}});if(isGecko){ed.onKeyDown.add(function(ed,e){if((e.keyCode==8||e.keyCode==46)&&!e.shiftKey)t.backspaceDelete(e,e.keyCode==8);});}}function ren(rn,na){var ne=ed.dom.create(na);each(rn.attributes,function(a){if(a.specified&&a.nodeValue)ne.setAttribute(a.nodeName.toLowerCase(),a.nodeValue);});each(rn.childNodes,function(n){ne.appendChild(n.cloneNode(true));});rn.parentNode.replaceChild(ne,rn);return ne;};if(isIE&&s.element!='P'){ed.onKeyPress.add(function(ed,e){t.lastElm=ed.selection.getNode().nodeName;});ed.onKeyUp.add(function(ed,e){var bl,sel=ed.selection,n=sel.getNode(),b=ed.getBody();if(b.childNodes.length===1&&n.nodeName=='P'){n=ren(n,s.element);sel.select(n);sel.collapse();ed.nodeChanged();}else if(e.keyCode==13&&!e.shiftKey&&t.lastElm!='P'){bl=ed.dom.getParent(n,'P');if(bl){ren(bl,s.element);ed.nodeChanged();}}});}},find:function(n,t,s){var ed=this.editor,w=ed.getDoc().createTreeWalker(n,4,null,false),c=-1;while(n=w.nextNode()){c++;if(t==0&&n==s)return c;if(t==1&&c==s)return n;}return-1;},forceRoots:function(ed,e){var t=this,ed=t.editor,b=ed.getBody(),d=ed.getDoc(),se=ed.selection,s=se.getSel(),r=se.getRng(),si=-2,ei,so,eo,tr,c=-0xFFFFFF;var nx,bl,bp,sp,le,nl=b.childNodes,i;if(e&&e.keyCode==13)return true;for(i=nl.length-1;i>=0;i--){nx=nl[i];if(nx.nodeType==3||(!t.dom.isBlock(nx)&&nx.nodeType!=8)){if(!bl){if(nx.nodeType!=3||/[^\s]/g.test(nx.nodeValue)){if(si==-2&&r){if(!isIE){so=r.startOffset;eo=r.endOffset;si=t.find(b,0,r.startContainer);ei=t.find(b,0,r.endContainer);}else{tr=d.body.createTextRange();tr.moveToElementText(b);tr.collapse(1);bp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(1);sp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(0);le=(tr.move('character',c)*-1)-sp;si=sp-bp;ei=le;}}bl=ed.dom.create(ed.settings.forced_root_block);bl.appendChild(nx.cloneNode(1));nx.parentNode.replaceChild(bl,nx);}}else{if(bl.hasChildNodes())bl.insertBefore(nx,bl.firstChild);else bl.appendChild(nx);}}else bl=null;}if(si!=-2){if(!isIE){bl=d.getElementsByTagName(ed.settings.element)[0];r=d.createRange();if(si!=-1)r.setStart(t.find(b,1,si),so);else r.setStart(bl,0);if(ei!=-1)r.setEnd(t.find(b,1,ei),eo);else r.setEnd(bl,0);if(s){s.removeAllRanges();s.addRange(r);}}else{try{r=s.createRange();r.moveToElementText(b);r.collapse(1);r.moveStart('character',si);r.moveEnd('character',ei);r.select();}catch(ex){}}}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,d=ed.getDoc(),se=ed.settings,s=ed.selection.getSel(),r=s.getRangeAt(0),b=d.body;var rb,ra,dir,sn,so,en,eo,sb,eb,bn,bef,aft,sc,ec,n,vp=ed.dom.getViewPort(ed.getWin()),y,ch;function isEmpty(n){n=n.innerHTML;n=n.replace(/<(img|hr|table)/gi,'-');n=n.replace(/<[^>]+>/g,'');return n.replace(/[ \t\r\n]+/g,'')=='';};rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(true);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(true);dir=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;sn=dir?s.anchorNode:s.focusNode;so=dir?s.anchorOffset:s.focusOffset;en=dir?s.focusNode:s.anchorNode;eo=dir?s.focusOffset:s.anchorOffset;if(sn==b&&en==b&&b.firstChild&&ed.dom.isBlock(b.firstChild)){sn=en=sn.firstChild;so=eo=0;rb=d.createRange();rb.setStart(sn,0);ra=d.createRange();ra.setStart(en,0);}sn=sn.nodeName=="HTML"?d.body:sn;sn=sn.nodeName=="BODY"?sn.firstChild:sn;en=en.nodeName=="HTML"?d.body:en;en=en.nodeName=="BODY"?en.firstChild:en;sb=t.getParentBlock(sn);eb=t.getParentBlock(en);bn=sb?sb.nodeName:se.element;if(t.dom.getParent(sb,function(n){return/OL|UL|PRE/.test(n.nodeName);}))return true;if(sb&&(sb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(sb.style.position))){bn=se.element;sb=null;}if(eb&&(eb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(eb.style.position))){bn=se.element;eb=null;}if(/(TD|TABLE|TH|CAPTION)/.test(bn)||(sb&&bn=="DIV"&&/left|right/gi.test(sb.style.cssFloat))){bn=se.element;sb=eb=null;}bef=(sb&&sb.nodeName==bn)?sb.cloneNode(0):ed.dom.create(bn);aft=(eb&&eb.nodeName==bn)?eb.cloneNode(0):ed.dom.create(bn);aft.removeAttribute('id');if(/^(H[1-6])$/.test(bn)&&sn.nodeValue&&so==sn.nodeValue.length)aft=ed.dom.create(se.element);n=sc=sn;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;sc=n;}while((n=n.previousSibling?n.previousSibling:n.parentNode));n=ec=en;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;ec=n;}while((n=n.nextSibling?n.nextSibling:n.parentNode));if(sc.nodeName==bn)rb.setStart(sc,0);else rb.setStartBefore(sc);rb.setEnd(sn,so);bef.appendChild(rb.cloneContents()||d.createTextNode(''));try{ra.setEndAfter(ec);}catch(ex){}ra.setStart(en,eo);aft.appendChild(ra.cloneContents()||d.createTextNode(''));r=d.createRange();if(!sc.previousSibling&&sc.parentNode.nodeName==bn){r.setStartBefore(sc.parentNode);}else{if(rb.startContainer.nodeName==bn&&rb.startOffset==0)r.setStartBefore(rb.startContainer);else r.setStart(rb.startContainer,rb.startOffset);}if(!ec.nextSibling&&ec.parentNode.nodeName==bn)r.setEndAfter(ec.parentNode);else r.setEnd(ra.endContainer,ra.endOffset);r.deleteContents();if(isOpera)ed.getWin().scrollTo(0,vp.y);if(bef.firstChild&&bef.firstChild.nodeName==bn)bef.innerHTML=bef.firstChild.innerHTML;if(aft.firstChild&&aft.firstChild.nodeName==bn)aft.innerHTML=aft.firstChild.innerHTML;if(isEmpty(bef))bef.innerHTML='<br />';if(isEmpty(aft))aft.innerHTML=isOpera?'&nbsp;':'<br />';if(isOpera){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();r=d.createRange();r.selectNodeContents(aft);r.collapse(1);s.removeAllRanges();s.addRange(r);y=ed.dom.getPos(aft).y;ch=aft.clientHeight;if(y<vp.y||y+ch>vp.y+vp.h){ed.getWin().scrollTo(0,y<vp.y?y:y-vp.h+ch);}return false;},backspaceDelete:function(e,bs){var t=this,ed=t.editor,b=ed.getBody(),n,se=ed.selection,r=se.getRng(),sc=r.startContainer,n,w,tn;if(sc&&ed.dom.isBlock(sc)&&!/^(TD|TH)$/.test(sc.nodeName)&&bs){if(sc.childNodes.length==0||(sc.childNodes.length==1&&sc.firstChild.nodeName=='BR')){n=sc;while((n=n.previousSibling)&&!ed.dom.isBlock(n));if(n){if(sc!=b.firstChild){w=ed.dom.doc.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(tn=w.nextNode())n=tn;r=ed.getDoc().createRange();r.setStart(n,n.nodeValue?n.nodeValue.length:0);r.setEnd(n,n.nodeValue?n.nodeValue.length:0);se.setRng(r);ed.dom.remove(sc);}return Event.cancel(e);}}}function handler(e){e=e.target;if(e&&e.parentNode&&e.nodeName=='BR'&&(n=t.getParentBlock(e))){Event.remove(b,'DOMNodeInserted',handler);if(e.previousSibling||e.nextSibling)ed.dom.remove(e);}};Event._add(b,'DOMNodeInserted',handler);window.setTimeout(function(){Event._remove(b,'DOMNodeInserted',handler);},1);}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,extend=tinymce.extend;tinymce.create('tinymce.ControlManager',{ControlManager:function(ed,s){var t=this,i;s=s||{};t.editor=ed;t.controls={};t.onAdd=new tinymce.util.Dispatcher(t);t.onPostRender=new tinymce.util.Dispatcher(t);t.prefix=s.prefix||ed.id+'_';t._cls={};t.onPostRender.add(function(){each(t.controls,function(c){c.postRender();});});},get:function(id){return this.controls[this.prefix+id]||this.controls[id];},setActive:function(id,s){var c=null;if(c=this.get(id))c.setActive(s);return c;},setDisabled:function(id,s){var c=null;if(c=this.get(id))c.setDisabled(s);return c;},add:function(c){var t=this;if(c){t.controls[c.id]=c;t.onAdd.dispatch(c,t);}return c;},createControl:function(n){var c,t=this,ed=t.editor;each(ed.plugins,function(p){if(p.createControl){c=p.createControl(n,t);if(c)return false;}});switch(n){case"|":case"separator":return t.createSeparator();}if(!c&&ed.buttons&&(c=ed.buttons[n]))return t.createButton(n,c);return t.add(c);},createDropMenu:function(id,s,cc){var t=this,ed=t.editor,c,bm,v,cls;s=extend({'class':'mceDropDown',constrain:ed.settings.constrain_menus},s);s['class']=s['class']+' '+ed.getParam('skin')+'Skin';if(v=ed.getParam('skin_variant'))s['class']+=' '+ed.getParam('skin')+'Skin'+v.substring(0,1).toUpperCase()+v.substring(1);id=t.prefix+id;cls=cc||t._cls.dropmenu||tinymce.ui.DropMenu;c=t.controls[id]=new cls(id,s);c.onAddItem.add(function(c,o){var s=o.settings;s.title=ed.getLang(s.title,s.title);if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,s.value);};}});ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){var s=ed.selection,n=s.getNode();if(n.nodeName=='IMG')bm=s.getBookmark();else bm=0;});c.onHideMenu.add(function(){if(bm)ed.selection.moveToBookmark(bm);});}return t.add(c);},createListBox:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;if(ed.settings.use_native_selects)c=new tinymce.ui.NativeListBox(id,s);else{cls=cc||t._cls.listbox||tinymce.ui.ListBox;c=new cls(id,s);}t.controls[id]=c;if(tinymce.isWebKit){c.onPostRender.add(function(c,n){Event.add(n,'mousedown',function(){ed.bookmark=ed.selection.getBookmark('simple');});Event.add(n,'focus',function(){ed.selection.moveToBookmark(ed.bookmark);ed.bookmark=null;});});}if(c.hideMenu)ed.onMouseDown.add(c.hideMenu,c);return t.add(c);},createButton:function(id,s,cc){var t=this,ed=t.editor,o,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick&&!s.menu_button){s.onclick=function(){ed.execCommand(s.cmd,s.ui||false,s.value);};}s=extend({title:s.title,'class':'mce_'+id,unavailable_prefix:ed.getLang('unavailable',''),scope:s.scope,control_manager:t},s);id=t.prefix+id;if(s.menu_button){cls=cc||t._cls.menubutton||tinymce.ui.MenuButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);}else{cls=t._cls.button||tinymce.ui.Button;c=new cls(id,s);}return t.add(c);},createMenuButton:function(id,s){s=s||{};s.menu_button=1;return this.createButton(id,s);},createSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;cls=cc||t._cls.splitbutton||tinymce.ui.SplitButton;c=t.add(new cls(id,s));ed.onMouseDown.add(c.hideMenu,c);return c;},createColorSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,'menu_class':ed.getParam('skin')+'Skin',scope:s.scope,more_colors_title:ed.getLang('more_colors')},s);id=t.prefix+id;cls=cc||t._cls.colorsplitbutton||tinymce.ui.ColorSplitButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);ed.onRemove.add(function(){c.destroy();});return t.add(c);},createToolbar:function(id,s,cc){var c,t=this,cls;id=t.prefix+id;cls=cc||t._cls.toolbar||tinymce.ui.Toolbar;c=new cls(id,s);if(t.get(id))return null;return t.add(c);},createSeparator:function(cc){var cls=cc||this._cls.separator||tinymce.ui.Separator;return new cls();},setControlType:function(n,c){return this._cls[n.toLowerCase()]=c;},destroy:function(){each(this.controls,function(c){c.destroy();});this.controls=null;}});})();(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each,isIE=tinymce.isIE,isOpera=tinymce.isOpera;tinymce.create('tinymce.WindowManager',{WindowManager:function(ed){var t=this;t.editor=ed;t.onOpen=new Dispatcher(t);t.onClose=new Dispatcher(t);t.params={};t.features={};},open:function(s,p){var t=this,f='',x,y,mo=t.editor.settings.dialog_type=='modal',w,sw,sh,vp=tinymce.DOM.getViewPort(),u;s=s||{};p=p||{};sw=isOpera?vp.w:screen.width;sh=isOpera?vp.h:screen.height;s.name=s.name||'mc_'+new Date().getTime();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240);s.resizable=true;s.left=s.left||parseInt(sw/ 2.0) - (s.width /2.0);s.top=s.top||parseInt(sh/ 2.0) - (s.height /2.0);p.inline=false;p.mce_width=s.width;p.mce_height=s.height;p.mce_auto_focus=s.auto_focus;if(mo){if(isIE){s.center=true;s.help=false;s.dialogWidth=s.width+'px';s.dialogHeight=s.height+'px';s.scroll=s.scrollbars||false;}else s.modal=s.alwaysRaised=s.dialog=s.centerscreen=s.dependent=true;}each(s,function(v,k){if(tinymce.is(v,'boolean'))v=v?'yes':'no';if(!/^(name|url)$/.test(k)){if(isIE&&mo)f+=(f?';':'')+k+':'+v;else f+=(f?',':'')+k+'='+v;}});t.features=s;t.params=p;t.onOpen.dispatch(t,s,p);u=s.url||s.file;if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;try{if(isIE&&mo){w=1;window.showModalDialog(s.url||s.file,window,f);}else w=window.open(u,s.name,f);}catch(ex){}if(!w)alert(t.editor.getLang('popup_blocked'));},close:function(w){w.close();this.onClose.dispatch(this);},createInstance:function(cl,a,b,c,d,e){var f=tinymce.resolve(cl);return new f(a,b,c,d,e);},confirm:function(t,cb,s){cb.call(s||this,confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s){var t=this;alert(t._decode(t.editor.getLang(tx,tx)));if(cb)cb.call(s||t);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}());
program/js/tiny_mce/tiny_mce_popup.js
@@ -1,294 +1,275 @@
// Some global instances, this will be filled later
var tinyMCE = null, tinyMCELang = null;
// Some global instances
var tinymce = null, tinyMCEPopup, tinyMCE;
function TinyMCE_Popup() {
tinyMCEPopup = {
    init : function() {
        var t = this, w, ti, li, q, i, it;
        li = ('' + document.location.search).replace(/^\?/, '').split('&');
        q = {};
        for (i=0; i<li.length; i++) {
            it = li[i].split('=');
            q[unescape(it[0])] = unescape(it[1]);
        }
        if (q.mce_rdomain)
            document.domain = q.mce_rdomain;
        // Find window & API
        w = t.getWin();
        tinymce = w.tinymce;
        tinyMCE = w.tinyMCE;
        t.editor = tinymce.EditorManager.activeEditor;
        t.params = t.editor.windowManager.params;
        // Setup local DOM
        t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);
        t.dom.loadCSS(t.editor.settings.popup_css);
        // Setup on init listeners
        t.listeners = [];
        t.onInit = {
            add : function(f, s) {
                t.listeners.push({func : f, scope : s});
            }
};
TinyMCE_Popup.prototype = {
    findWin : function(w) {
        var c;
        // Check parents
        c = w;
        while (c && (c = c.parent) != null) {
            if (typeof(c.tinyMCE) != "undefined")
                return c;
        }
        // Check openers
        c = w;
        while (c && (c = c.opener) != null) {
            if (typeof(c.tinyMCE) != "undefined")
                return c;
        }
        // Try top
        if (typeof(top.tinyMCE) != "undefined")
            return top;
        return null;
        t.isWindow = !t.getWindowArg('mce_inline');
        t.id = t.getWindowArg('mce_window_id');
        t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);
    },
    init : function() {
        var win = window.opener ? window.opener : window.dialogArguments, c;
        var inst, re, title, divElm;
        if (!win)
            win = this.findWin(window);
        if (!win) {
            alert("tinyMCE object reference not found from popup.");
            return;
        }
        window.opener = win;
        this.windowOpener = win;
        this.onLoadEval = "";
        // Setup parent references
        tinyMCE = win.tinyMCE;
        tinyMCELang = win.tinyMCELang;
        inst = tinyMCE.selectedInstance;
        this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;
        this.storeSelection = (tinyMCE.isRealIE) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);
        if (this.isWindow)
            window.focus();
        // Store selection
        if (this.storeSelection)
            inst.selectionBookmark = inst.selection.getBookmark(true);
        // Setup dir
        if (tinyMCELang.lang_dir)
            document.dir = tinyMCELang.lang_dir;
        // Setup title
        re = new RegExp('{|\\\$|}', 'g');
        title = document.title.replace(re, "");
        if (typeof(tinyMCELang[title]) != "undefined") {
            divElm = document.createElement("div");
            divElm.innerHTML = tinyMCELang[title];
            document.title = divElm.innerHTML;
            if (typeof(tinyMCE.setWindowTitle) != 'undefined')
                tinyMCE.setWindowTitle(window, divElm.innerHTML);
        }
        // Output Popup CSS class
        document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');
        if (tinyMCE.getParam("popups_css_add")) {
            c = tinyMCE.getParam("popups_css_add");
            // Is relative
            if (c.indexOf('://') == -1 && c.charAt(0) != '/')
                c = tinyMCE.documentBasePath + "/" + c;
            document.write('<link href="' + c + '" rel="stylesheet" type="text/css">');
        }
        tinyMCE.addEvent(window, "load", this.onLoad);
    getWin : function() {
        return window.dialogArguments || opener || parent || top;
    },
    onLoad : function() {
        var dir, i, elms, body = document.body;
    getWindowArg : function(n, dv) {
        var v = this.params[n];
        if (tinyMCE.getWindowArg('mce_replacevariables', true))
            body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);
        dir = tinyMCE.selectedInstance.settings.directionality;
        if (dir == "rtl" && document.forms && document.forms.length > 0) {
            elms = document.forms[0].elements;
            for (i=0; i<elms.length; i++) {
                if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")
                    elms[i].dir = dir;
            }
        }
        if (body.style.display == 'none')
            body.style.display = 'block';
        // Execute real onload (Opera fix)
        if (tinyMCEPopup.onLoadEval !== '')
            eval(tinyMCEPopup.onLoadEval);
        return tinymce.is(v) ? v : dv;
    },
    executeOnLoad : function(str) {
        if (tinyMCE.isOpera && parseFloat(opera.version()) < 9.5)
            this.onLoadEval = str;
        else
            eval(str);
    getParam : function(n, dv) {
        return this.editor.getParam(n, dv);
    },
    getLang : function(n, dv) {
        return this.editor.getLang(n, dv);
    },
    execCommand : function(cmd, ui, val, a) {
        a = a || {};
        a.skip_focus = 1;
        this.restoreSelection();
        return this.editor.execCommand(cmd, ui, val, a);
    },
    resizeToInnerSize : function() {
        var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy;
        var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;
        // Netscape 7.1 workaround
        if (this.isWindow && tinyMCE.isNS71) {
            window.resizeBy(0, 10);
            return;
        }
        dw = t.getWindowArg('mce_width') - vp.w;
        dh = t.getWindowArg('mce_height') - vp.h;
        if (this.isWindow) {
            doc = document;
            body = doc.body;
            if (body.style.display == 'none')
                body.style.display = 'block';
            // Remove margin
            oldMargin = body.style.margin;
            body.style.margin = '0';
            // Create wrapper
            wrapper = doc.createElement("div");
            wrapper.id = 'mcBodyWrapper';
            wrapper.style.display = 'none';
            wrapper.style.margin = '0';
            // Wrap body elements
            nodes = doc.body.childNodes;
            for (i=nodes.length-1; i>=0; i--) {
                if (wrapper.hasChildNodes())
                    wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);
        if (t.isWindow)
            window.resizeBy(dw, dh);
                else
                    wrapper.appendChild(nodes[i].cloneNode(true));
                nodes[i].parentNode.removeChild(nodes[i]);
            }
            // Add wrapper
            doc.body.appendChild(wrapper);
            // Create iframe
            iframe = document.createElement("iframe");
            iframe.id = "mcWinIframe";
            iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings.default_document;
            iframe.width = "100%";
            iframe.height = "100%";
            iframe.style.margin = '0';
            // Add iframe
            doc.body.appendChild(iframe);
            // Measure iframe
            iframe = document.getElementById('mcWinIframe');
            dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;
            dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;
            // Resize window
            // tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);
            window.resizeBy(dx, dy);
            // Hide iframe and show wrapper
            body.style.margin = oldMargin;
            iframe.style.display = 'none';
            wrapper.style.display = 'block';
        }
            t.editor.windowManager.resizeBy(dw, dh, t.id);
    },
    resizeToContent : function() {
        var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
        var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
        var elm, width, height, x, y, dx, dy;
        if (isOpera)
            return;
        if (isMSIE) {
            try { window.resizeTo(10, 10); } catch (e) {}
            elm = document.body;
            width = elm.offsetWidth;
            height = elm.offsetHeight;
            dx = (elm.scrollWidth - width) + 4;
            dy = elm.scrollHeight - height;
            try { window.resizeBy(dx, dy); } catch (e) {}
        } else {
            window.scrollBy(1000, 1000);
            if (window.scrollX > 0 || window.scrollY > 0) {
                window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);
                window.sizeToContent();
                window.scrollTo(0, 0);
                x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);
                y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);
                window.moveTo(x, y);
            }
        }
    executeOnLoad : function(s) {
        this.onInit.add(function() {
            eval(s);
        });
    },
    getWindowArg : function(name, default_value) {
        return tinyMCE.getWindowArg(name, default_value);
    storeSelection : function() {
        this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');
    },
    restoreSelection : function() {
        var inst;
        var t = tinyMCEPopup;
        if (this.storeSelection) {
            inst = tinyMCE.selectedInstance;
        if (!t.isWindow && tinymce.isIE)
            t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);
    },
            inst.getWin().focus();
    requireLangPack : function() {
        var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url');
            if (inst.selectionBookmark)
                inst.selection.moveToBookmark(inst.selectionBookmark);
        if (u && this.editor.settings.language) {
            u += '/langs/' + this.editor.settings.language + '_dlg.js';
            if (!tinymce.ScriptLoader.isDone(u)) {
                document.write('<script type="text/javascript" src="' + u + '"></script>');
                tinymce.ScriptLoader.markDone(u);
            }
        }
    },
    execCommand : function(command, user_interface, value) {
        var inst = tinyMCE.selectedInstance;
        this.restoreSelection();
        inst.execCommand(command, user_interface, value);
        // Store selection
        if (this.storeSelection)
            inst.selectionBookmark = inst.selection.getBookmark(true);
    },
    close : function() {
        tinyMCE.closeWindow(window);
    },
    pickColor : function(e, element_id) {
        tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {
            element_id : element_id,
            document : document,
            window : window,
            store_selection : false
        this.execCommand('mceColorPicker', true, {
            color : document.getElementById(element_id).value,
            func : function(c) {
                document.getElementById(element_id).value = c;
                try {
                    document.getElementById(element_id).onchange();
                } catch (ex) {
                    // Try fire event, ignore errors
                }
            }
        });
    },
    openBrowser : function(element_id, type, option) {
        var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
        var url = document.getElementById(element_id).value;
        tinyMCE.setWindowArg("window", window);
        tinyMCE.setWindowArg("document", document);
        // Call to external callback
        if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")
            alert("Callback function: " + cb + " could not be found.");
        else
            eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");
        tinyMCEPopup.restoreSelection();
        this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);
    },
    importClass : function(c) {
        var n;
    close : function() {
        var t = this;
        window[c] = function() {};
        for (n in window.opener[c].prototype)
            window[c].prototype[n] = window.opener[c].prototype[n];
        window[c].constructor = window.opener[c].constructor;
    }
        // To avoid domain relaxing issue in Opera
        function close() {
            t.editor.windowManager.close(window, t.id);
            tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup
    };
// Setup global instance
var tinyMCEPopup = new TinyMCE_Popup();
        if (tinymce.isOpera)
            t.getWin().setTimeout(close, 0);
        else
            close();
    },
    // Internal functions
    _restoreSelection : function() {
        var e = window.event.srcElement;
        if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button'))
            tinyMCEPopup.restoreSelection();
    },
/*    _restoreSelection : function() {
        var e = window.event.srcElement;
        // If user focus a non text input or textarea
        if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')
            tinyMCEPopup.restoreSelection();
    },*/
    _onDOMLoaded : function() {
        var t = this, ti = document.title, bm, h;
        // Translate page
        h = document.body.innerHTML;
        // Replace a=x with a="x" in IE
        if (tinymce.isIE)
            h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')
        document.dir = t.editor.getParam('directionality','');
        document.body.innerHTML = t.editor.translate(h);
        document.title = ti = t.editor.translate(ti);
        document.body.style.display = '';
        // Restore selection in IE when focus is placed on a non textarea or input element of the type text
        if (tinymce.isIE)
            document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);
        t.restoreSelection();
        t.resizeToInnerSize();
        // Set inline title
        if (!t.isWindow)
            t.editor.windowManager.setTitle(ti, t.id);
        else
            window.focus();
        if (!tinymce.isIE && !t.isWindow) {
            tinymce.dom.Event._add(document, 'focus', function() {
                t.editor.windowManager.focus(t.id)
            });
        }
        // Patch for accessibility
        tinymce.each(t.dom.select('select'), function(e) {
            e.onkeydown = tinyMCEPopup._accessHandler;
        });
        // Call onInit
        // Init must be called before focus so the selection won't get lost by the focus call
        tinymce.each(t.listeners, function(o) {
            o.func.call(o.scope, t.editor);
        });
        // Move focus to window
        if (t.getWindowArg('mce_auto_focus', true)) {
            window.focus();
            // Focus element with mceFocus class
            tinymce.each(document.forms, function(f) {
                tinymce.each(f.elements, function(e) {
                    if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {
                        e.focus();
                        return false; // Break loop
                    }
                });
            });
        }
        document.onkeyup = tinyMCEPopup._closeWinKeyHandler;
    },
    _accessHandler : function(e) {
        e = e || window.event;
        if (e.keyCode == 13 || e.keyCode == 32) {
            e = e.target || e.srcElement;
            if (e.onchange)
                e.onchange();
            return tinymce.dom.Event.cancel(e);
        }
    },
    _closeWinKeyHandler : function(e) {
        e = e || window.event;
        if (e.keyCode == 27)
            tinyMCEPopup.close();
    },
    _wait : function() {
        var t = this, ti;
        if (tinymce.isIE && document.location.protocol != 'https:') {
            // Fake DOMContentLoaded on IE
            document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") {
                    t._onDOMLoaded();
                    document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak
                }
            };
        } else {
            if (tinymce.isIE || tinymce.isWebKit) {
                ti = setInterval(function() {
                    if (/loaded|complete/.test(document.readyState)) {
                        clearInterval(ti);
                        t._onDOMLoaded();
                    }
                }, 10);
            } else {
                window.addEventListener('DOMContentLoaded', function() {
                    t._onDOMLoaded();
                }, false);
            }
        }
    }
};
tinyMCEPopup.init();
tinyMCEPopup._wait(); // Wait for DOM Content Loaded
program/js/tiny_mce/tiny_mce_src.js
Diff too large
program/js/tiny_mce/utils/editable_selects.js
@@ -1,10 +1,10 @@
/**
 * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $
 * $Id: editable_selects.js 520 2008-01-07 16:30:32Z spocke $
 *
 * Makes select boxes editable.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
var TinyMCE_EditableSelects = {
@@ -20,13 +20,13 @@
                o.className = 'mceAddSelectValue';
                nl[i].options[nl[i].options.length] = o;
                nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);');
                nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
            }
        }
    },
    onChangeEditableSelect : function(se) {
        var d = document, ne;
    onChangeEditableSelect : function(e) {
        var d = document, ne, se = window.event ? window.event.srcElement : e.target;
        if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
            ne = d.createElement("input");
@@ -34,7 +34,7 @@
            ne.name = se.name + "_custom";
            ne.type = "text";
            ne.style.width = se.clientWidth;
            ne.style.width = se.offsetWidth + 'px';
            se.parentNode.insertBefore(ne, se);
            se.style.display = 'none';
            ne.focus();
program/js/tiny_mce/utils/form_utils.js
@@ -1,31 +1,21 @@
/**
 * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $
 * $Id: form_utils.js 673 2008-03-06 13:26:20Z spocke $
 *
 * Various form utilitiy functions.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.getParam("theme");
var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));
function getColorPickerHTML(id, target_form_element) {
    var h = "";
    h += '<a id="' + id + '_link" href="javascript:void(0);" onkeydown="pickColor(event,\'' + target_form_element +'\');" onmousedown="pickColor(event,\'' + target_form_element +'\');return false;">';
    h += '<img id="' + id + '" src="' + themeBaseURL + '/images/color.gif"';
    h += ' onmouseover="this.className=\'mceButtonOver\'"';
    h += ' onmouseout="this.className=\'mceButtonNormal\'"';
    h += ' onmousedown="this.className=\'mceButtonDown\'"';
    h += ' width="20" height="16" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
    h += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
    h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
    h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';
    return h;
}
function pickColor(e, target_form_element) {
    if ((e.keyCode == 32 || e.keyCode == 13) || e.type == "mousedown")
        tinyMCEPopup.pickColor(e, target_form_element);
}
function updateColor(img_id, form_element_id) {
@@ -40,34 +30,32 @@
        if (state) {
            lnk.setAttribute("realhref", lnk.getAttribute("href"));
            lnk.removeAttribute("href");
            tinyMCE.switchClass(img, 'mceButtonDisabled', true);
            tinyMCEPopup.dom.addClass(img, 'disabled');
        } else {
            if (lnk.getAttribute("realhref"))
            lnk.setAttribute("href", lnk.getAttribute("realhref"));
            tinyMCE.switchClass(img, 'mceButtonNormal', false);
            tinyMCEPopup.dom.removeClass(img, 'disabled');
        }
    }
}
function getBrowserHTML(id, target_form_element, type, prefix) {
    var option = prefix + "_" + type + "_browser_callback";
    var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
    if (cb == null)
    var option = prefix + "_" + type + "_browser_callback", cb, html;
    cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
    if (!cb)
        return "";
    var html = "";
    html += '<a id="' + id + '_link" href="javascript:openBrower(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;">';
    html += '<img id="' + id + '" src="' + themeBaseURL + '/images/browse.gif"';
    html += ' onmouseover="this.className=\'mceButtonOver\';"';
    html += ' onmouseout="this.className=\'mceButtonNormal\';"';
    html += ' onmousedown="this.className=\'mceButtonDown\';"';
    html += ' width="20" height="18" border="0" title="' + tinyMCE.getLang('lang_browse') + '"';
    html += ' class="mceButtonNormal" alt="' + tinyMCE.getLang('lang_browse') + '" /></a>';
    html = "";
    html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
    html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>';
    return html;
}
function openBrower(img_id, target_form_element, type, option) {
function openBrowser(img_id, target_form_element, type, option) {
    var img = document.getElementById(img_id);
    if (img.className != "mceButtonDisabled")
@@ -119,8 +107,8 @@
function addClassesToList(list_id, specific_option) {
    // Setup class droplist
    var styleSelectElm = document.getElementById(list_id);
    var styles = tinyMCE.getParam('theme_advanced_styles', false);
    styles = tinyMCE.getParam(specific_option, styles);
    var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
    styles = tinyMCEPopup.getParam(specific_option, styles);
    if (styles) {
        var stylesAr = styles.split(';');
@@ -136,10 +124,9 @@
            }
        }
    } else {
        // Use auto impored classes
        var csses = tinyMCE.getCSSClasses(tinyMCE.getWindowArg('editor_id'));
        for (var i=0; i<csses.length; i++)
            styleSelectElm.options[styleSelectElm.length] = new Option(csses[i], csses[i]);
        tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
            styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
        });
    }
}
@@ -183,7 +170,7 @@
}
function trimSize(size) {
    return size.replace(new RegExp('[^0-9%]', 'gi'), '');
    return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
}
function getCSSSize(size) {
@@ -192,11 +179,15 @@
    if (size == "")
        return "";
    return size.indexOf('%') != -1 ? size : size + "px";
    // Add px
    if (/^[0-9]+$/.test(size))
        size += 'px';
    return size;
}
function getStyle(elm, attrib, style) {
    var val = tinyMCE.getAttrib(elm, attrib);
    var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
    if (val != '')
        return '' + val;
@@ -204,7 +195,5 @@
    if (typeof(style) == 'undefined')
        style = attrib;
    val = eval('elm.style.' + style);
    return val == null ? '' : '' + val;
    return tinyMCEPopup.dom.getStyle(elm, style);
}
program/js/tiny_mce/utils/mclayer.js
File was deleted
program/js/tiny_mce/utils/mctabs.js
@@ -1,14 +1,14 @@
/**
 * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $
 * $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $
 *
 * Moxiecode DHTML Tabs script.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function MCTabs() {
    this.settings = new Array();
    this.settings = [];
};
MCTabs.prototype.init = function(settings) {
@@ -28,17 +28,19 @@
};
MCTabs.prototype.displayTab = function(tab_id, panel_id) {
    var panelElm = document.getElementById(panel_id);
    var panelContainerElm = panelElm ? panelElm.parentNode : null;
    var tabElm = document.getElementById(tab_id);
    var tabContainerElm = tabElm ? tabElm.parentNode : null;
    var selectionClass = this.getParam('selection_class', 'current');
    var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;
    panelElm= document.getElementById(panel_id);
    panelContainerElm = panelElm ? panelElm.parentNode : null;
    tabElm = document.getElementById(tab_id);
    tabContainerElm = tabElm ? tabElm.parentNode : null;
    selectionClass = this.getParam('selection_class', 'current');
    if (tabElm && tabContainerElm) {
        var nodes = tabContainerElm.childNodes;
        nodes = tabContainerElm.childNodes;
        // Hide all other tabs
        for (var i=0; i<nodes.length; i++) {
        for (i = 0; i < nodes.length; i++) {
            if (nodes[i].nodeName == "LI")
                nodes[i].className = '';
        }
@@ -48,10 +50,10 @@
    }
    if (panelElm && panelContainerElm) {
        var nodes = panelContainerElm.childNodes;
        nodes = panelContainerElm.childNodes;
        // Hide all other panels
        for (var i=0; i<nodes.length; i++) {
        for (i = 0; i < nodes.length; i++) {
            if (nodes[i].nodeName == "DIV")
                nodes[i].className = 'panel';
        }
program/js/tiny_mce/utils/validate.js
@@ -1,10 +1,10 @@
/**
 * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $
 * $Id: validate.js 758 2008-03-30 13:53:29Z spocke $
 *
 * Various form validation methods.
 *
 * @author Moxiecode
 * @copyright Copyright © 2004-2007, Moxiecode Systems AB, All rights reserved.
 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/**
@@ -31,7 +31,7 @@
    },
    isSize : function(s) {
        return this.test(s, '^[0-9]+(px|%)?$');
        return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
    },
    isId : function(s) {
@@ -110,7 +110,7 @@
    },
    reset : function(e) {
        var t = new Array('label', 'input', 'select', 'textarea');
        var t = ['label', 'input', 'select', 'textarea'];
        var i, j, nl, s = this.settings;
        if (e == null)
program/steps/mail/compose.inc
@@ -426,8 +426,7 @@
  $out .= $msgtype->show();
  // If desired, set this text area to be editable by TinyMCE
  if ($isHtml)
    $attrib['mce_editable'] = "true";
  if ($isHtml) $attrib['class'] = "mce_editor";
  $textarea = new html_textarea($attrib);
  $out .= $textarea->show($body);
  $out .= $form_end ? "\n$form_end" : '';
@@ -799,9 +798,13 @@
  // determine whether HTML or plain text should be checked 
  if ($CONFIG['htmleditor'])
    {
    $useHtml = true;
    }
  else
    {
    $useHtml = false;
    }
  if ($compose_mode == RCUBE_COMPOSE_REPLY ||
      $compose_mode == RCUBE_COMPOSE_FORWARD ||
@@ -811,23 +814,19 @@
    $useHtml = ($hasHtml && $CONFIG['htmleditor']);
  }
  $chosenvalue = $useHtml ? 'html' : 'plain';
  $selector = '';
  
  $attrib['name'] = '_editorSelect';
  $attrib['onchange'] = 'return rcmail_toggle_editor(this)';
  foreach ($choices as $value => $text)
  {
    $checked = '';
    if ((($value == 'html') && $useHtml) ||
        (($value != 'html') && !$useHtml))
      $attrib['checked'] = 'true';
    else
      unset($attrib['checked']);
    $attrib['id'] = '_' . $value;
    $attrib['value'] = $value;
    $rb = new html_radiobutton($attrib);
    $selector .= sprintf("%s<label for=\"%s\">%s</label>",
                         $rb->show($value),
                         $rb->show($chosenvalue),
                         $attrib['id'],
                         rcube_label($text));
  }
program/steps/settings/edit_identity.inc
@@ -40,10 +40,10 @@
  global $IDENTITY_RECORD, $OUTPUT;
  $OUTPUT->include_script('tiny_mce/tiny_mce_src.js');
  $OUTPUT->add_script("tinyMCE.init({ mode : 'specific_textareas'," .
  $OUTPUT->add_script("tinyMCE.init({ mode : 'textareas'," .
                                    "editor_selector : 'mce_editor'," .
                                    "apply_source_formatting : true," .
                                    "content_css : '\$__skin_path' + '/editor_content.css'," .
                                    "editor_css : '\$__skin_path' + '/editor_ui.css'," .
                                    "theme : 'advanced'," .
                                    "theme_advanced_toolbar_location : 'top'," .
                                    "theme_advanced_toolbar_align : 'left'," .
@@ -69,7 +69,7 @@
                       'reply-to'     => array('type' => 'text', 'label' => 'replyto'),
                       'bcc'          => array('type' => 'text'),
                       'signature'      => array('type' => 'textarea', 'size' => "40", 'rows' => "6"),
                       'html_signature'=>array('type' => 'checkbox', 'label' => 'htmlsignature', 'onclick' => 'return rcmail.toggle_editor(this, \'_signature\');'),
                       'html_signature'=>array('type' => 'checkbox', 'label' => 'htmlsignature', 'onclick' => 'return rcmail.toggle_editor(this, \'rcmfd_signature\');'),
                       'standard'     => array('type' => 'checkbox', 'label' => 'setdefault'));
@@ -104,13 +104,15 @@
      {
      $attrib['size'] = $colprop['size'];
      $attrib['rows'] = $colprop['rows'];
      $attrib['mce_editable'] = $IDENTITY_RECORD['html_signature'] ? "true" : "false";
      if ($IDENTITY_RECORD['html_signature'])
        {
        $attrib['class'] = "mce_editor";
        }
      }
    else
      {
      unset($attrib['size']);
      unset($attrib['rows']);
      unset($attrib['mce_editable']);
      }
    $label = strlen($colprop['label']) ? $colprop['label'] : $col;