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

133 files deleted
52 files modified
32 files renamed
75 files added
38233 ■■■■■ changed files
CHANGELOG 4 ●●●● patch | view | raw | blame | history
program/js/app.js 23 ●●●●● 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 1008 ●●●● 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 85 ●●●●● 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 136 ●●●● 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 791 ●●●● 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 146 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/media/js/media.js 1215 ●●●● 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 359 ●●●●● 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 92 ●●●●● 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 24 ●●●● 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 205 ●●●● 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 814 ●●●●● 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 32 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/css/row.css 50 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/css/table.css 26 ●●●● 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 1855 ●●●● 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 86 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/plugins/table/js/table.js 214 ●●●●● 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 124 ●●●●● 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 21 ●●●● 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 2564 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/themes/advanced/image.htm 186 ●●●● 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 33 ●●●●● 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 155 ●●●●● 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 93 ●●●●● 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 569 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/tiny_mce_src.js 17885 ●●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/editable_selects.js 122 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/form_utils.js 409 ●●●● 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 150 ●●●● patch | view | raw | blame | history
program/js/tiny_mce/utils/validate.js 438 ●●●● patch | view | raw | blame | history
program/steps/mail/compose.inc 21 ●●●● 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
@@ -1,504 +1,504 @@
          GNU LESSER GENERAL PUBLIC LICENSE
               Version 2.1, February 1999
 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]
                Preamble
  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.
  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.
  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.
  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
          GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)
  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
    a) The modified work must itself be a software library.
    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.
    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.
    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.
    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)
These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.
  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.
  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:
    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)
    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.
    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.
    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.
    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.
  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.
    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.
  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.
  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
                NO WARRANTY
  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
             END OF TERMS AND CONDITIONS
           How to Apply These Terms to Your New Libraries
  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:
  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice
That's all there is to it!
          GNU LESSER GENERAL PUBLIC LICENSE
               Version 2.1, February 1999
 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.
[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]
                Preamble
  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.
  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.
  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.
  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.
  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.
  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.
  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.
  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.
  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.
  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.
  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.
  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.
  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.
  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.
  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.
          GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".
  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.
  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)
  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.
  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.
  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.
  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
    a) The modified work must itself be a software library.
    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.
    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.
    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.
    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)
These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.
In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.
  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.
  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.
  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.
  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.
  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.
  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.
  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.
  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)
  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.
  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.
  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:
    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)
    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.
    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.
    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.
    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.
  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.
  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.
  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:
    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.
    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.
  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.
  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.
  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.
  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.
If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.
  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.
Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.
  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.
                NO WARRANTY
  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.
             END OF TERMS AND CONDITIONS
           How to Apply These Terms to Your New Libraries
  If you develop a new library, and you want it to be of the greatest
possible use to the public, we recommend making it free software that
everyone can redistribute and change.  You can do so by permitting
redistribution under these terms (or, alternatively, under the terms of the
ordinary General Public License).
  To apply these terms, attach the following notices to the library.  It is
safest to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
    <one line to give the library's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>
    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.
    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Also add information on how to contact you by electronic and paper mail.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the library, if
necessary.  Here is a sample; alter the names:
  Yoyodyne, Inc., hereby disclaims all copyright interest in the
  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
  <signature of Ty Coon>, 1 April 1990
  Ty Coon, President of Vice
That's all there is to it!
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 = {
    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
        };
    },
            // Register buttons
            ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});
        },
    /**
     * 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');
        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
            };
        }
    });
        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);
    // Register plugin
    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
@@ -1,68 +1,68 @@
#id, #name, #hspace, #vspace, #class_name, #align {
    width: 100px;
}
#hspace, #vspace {
    width: 50px;
}
#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {
    width: 100px;
}
#flash_base, #flash_flashvars {
    width: 240px;
}
#width, #height {
    width: 40px;
}
#src, #media_type {
    width: 250px;
}
#class {
    width: 120px;
}
#prev {
    margin: 0;
    border: 1px solid black;
    width: 99%;
    height: 230px;
    overflow: auto;
}
.panel_wrapper div.current {
    height: 390px;
    overflow: auto;
}
#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {
    display: none;
}
.mceAddSelectValue {
    background-color: #DDDDDD;
}
#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {
    width: 70px;
}
#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {
    width: 70px;
}
#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {
    width: 70px;
}
#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {
    width: 90px;
}
#qt_qtsrc {
    width: 200px;
}
#id, #name, #hspace, #vspace, #class_name, #align {
    width: 100px;
}
#hspace, #vspace {
    width: 50px;
}
#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode {
    width: 100px;
}
#flash_base, #flash_flashvars {
    width: 240px;
}
#width, #height {
    width: 40px;
}
#src, #media_type {
    width: 250px;
}
#class {
    width: 120px;
}
#prev {
    margin: 0;
    border: 1px solid black;
    width: 99%;
    height: 230px;
    overflow: auto;
}
.panel_wrapper div.current {
    height: 390px;
    overflow: auto;
}
#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options {
    display: none;
}
.mceAddSelectValue {
    background-color: #DDDDDD;
}
#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume {
    width: 70px;
}
#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume {
    width: 70px;
}
#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks {
    width: 70px;
}
#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle {
    width: 90px;
}
#qt_qtsrc {
    width: 200px;
}
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,432 +1,359 @@
/**
 * $Id: editor_plugin_src.js 296 2007-08-21 10:36:35Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
/* Import plugin specific language pack */
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) {
        // 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)
                    }, {
                        editor_id : editor_id,
                        inline : "yes"
                });
                return true;
       }
       // Pass to next handler in chain
       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;
                    }
                }
                // 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;
                        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));
                    // 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 = {};
                        }
                    }
                    // Use object/embed
                    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;
                        }
                        // 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 (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;
        }
        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] + '" />';
                // 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;
    }
};
tinyMCE.addPlugin("media", TinyMCE_MediaPlugin);
/**
 * $Id: editor_plugin_src.js 763 2008-04-03 13:25:45Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(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);
            };
            // 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
                }, {
                    plugin_url : url
                });
            });
            // Register buttons
            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
            };
        },
        // 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
File was renamed from program/js/tiny_mce/plugins/media/jscripts/embed.js
@@ -1,73 +1,73 @@
/**
 * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
 */
function writeFlash(p) {
    writeEmbed(
        'D27CDB6E-AE6D-11cf-96B8-444553540000',
        'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
        'application/x-shockwave-flash',
        p
    );
}
function writeShockWave(p) {
    writeEmbed(
    '166B1BCA-3F9C-11CF-8075-444553540000',
    'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
    'application/x-director',
        p
    );
}
function writeQuickTime(p) {
    writeEmbed(
        '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
        'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
        'video/quicktime',
        p
    );
}
function writeRealMedia(p) {
    writeEmbed(
        'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
        'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
        'audio/x-pn-realaudio-plugin',
        p
    );
}
function writeWindowsMedia(p) {
    p.url = p.src;
    writeEmbed(
        '6BF52A52-394A-11D3-B153-00C04F79FAA6',
        'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
        'application/x-mplayer2',
        p
    );
}
function writeEmbed(cls, cb, mt, p) {
    var h = '', n;
    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)
        h += '<param name="' + n + '" value="' + p[n] + '">';
    h += '<embed type="' + mt + '"';
    for (n in p)
        h += n + '="' + p[n] + '" ';
    h += '></embed></object>';
    document.write(h);
}
/**
 * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.
 */
function writeFlash(p) {
    writeEmbed(
        'D27CDB6E-AE6D-11cf-96B8-444553540000',
        'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
        'application/x-shockwave-flash',
        p
    );
}
function writeShockWave(p) {
    writeEmbed(
    '166B1BCA-3F9C-11CF-8075-444553540000',
    'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',
    'application/x-director',
        p
    );
}
function writeQuickTime(p) {
    writeEmbed(
        '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',
        'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',
        'video/quicktime',
        p
    );
}
function writeRealMedia(p) {
    writeEmbed(
        'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',
        'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',
        'audio/x-pn-realaudio-plugin',
        p
    );
}
function writeWindowsMedia(p) {
    p.url = p.src;
    writeEmbed(
        '6BF52A52-394A-11D3-B153-00C04F79FAA6',
        'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
        'application/x-mplayer2',
        p
    );
}
function writeEmbed(cls, cb, mt, p) {
    var h = '', n;
    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)
        h += '<param name="' + n + '" value="' + p[n] + '">';
    h += '<embed type="' + mt + '"';
    for (n in p)
        h += n + '="' + p[n] + '" ';
    h += '></embed></object>';
    document.write(h);
}
program/js/tiny_mce/plugins/media/js/media.js
File was renamed from program/js/tiny_mce/plugins/media/jscripts/media.js
@@ -1,594 +1,621 @@
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;
    document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></sc'+'ript>');
}
function init() {
    var pl = "", f, val;
    var type = "flash", fe, i;
    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 + "};";
        switch (tinyMCE.getAttrib(fe, 'class')) {
            case 'mceItemFlash':
                type = 'flash';
                break;
            case 'mceItemShockWave':
                type = 'shockwave';
                break;
            case 'mceItemWindowsMedia':
                type = 'wmp';
                break;
            case 'mceItemQuickTime':
                type = 'qt';
                break;
            case 'mceItemRealMedia':
                type = 'rmp';
                break;
        }
        document.forms[0].insert.value = tinyMCE.getLang('lang_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');
    if (html == "")
        document.getElementById("linklistrow").style.display = 'none';
    else
        document.getElementById("linklistcontainer").innerHTML = html;
    // Resize some elements
    if (isVisible('filebrowsercontainer'))
        document.getElementById('src').style.width = '230px';
    // Setup form
    if (pl != "") {
        pl = eval(pl);
        switch (type) {
            case "flash":
                setBool(pl, 'flash', 'play');
                setBool(pl, 'flash', 'loop');
                setBool(pl, 'flash', 'menu');
                setBool(pl, 'flash', 'swliveconnect');
                setStr(pl, 'flash', 'quality');
                setStr(pl, 'flash', 'scale');
                setStr(pl, 'flash', 'salign');
                setStr(pl, 'flash', 'wmode');
                setStr(pl, 'flash', 'base');
                setStr(pl, 'flash', 'flashvars');
            break;
            case "qt":
                setBool(pl, 'qt', 'loop');
                setBool(pl, 'qt', 'autoplay');
                setBool(pl, 'qt', 'cache');
                setBool(pl, 'qt', 'controller');
                setBool(pl, 'qt', 'correction');
                setBool(pl, 'qt', 'enablejavascript');
                setBool(pl, 'qt', 'kioskmode');
                setBool(pl, 'qt', 'autohref');
                setBool(pl, 'qt', 'playeveryframe');
                setBool(pl, 'qt', 'tarsetcache');
                setStr(pl, 'qt', 'scale');
                setStr(pl, 'qt', 'starttime');
                setStr(pl, 'qt', 'endtime');
                setStr(pl, 'qt', 'tarset');
                setStr(pl, 'qt', 'qtsrcchokespeed');
                setStr(pl, 'qt', 'volume');
                setStr(pl, 'qt', 'qtsrc');
            break;
            case "shockwave":
                setBool(pl, 'shockwave', 'sound');
                setBool(pl, 'shockwave', 'progress');
                setBool(pl, 'shockwave', 'autostart');
                setBool(pl, 'shockwave', 'swliveconnect');
                setStr(pl, 'shockwave', 'swvolume');
                setStr(pl, 'shockwave', 'swstretchstyle');
                setStr(pl, 'shockwave', 'swstretchhalign');
                setStr(pl, 'shockwave', 'swstretchvalign');
            break;
            case "wmp":
                setBool(pl, 'wmp', 'autostart');
                setBool(pl, 'wmp', 'enabled');
                setBool(pl, 'wmp', 'enablecontextmenu');
                setBool(pl, 'wmp', 'fullscreen');
                setBool(pl, 'wmp', 'invokeurls');
                setBool(pl, 'wmp', 'mute');
                setBool(pl, 'wmp', 'stretchtofit');
                setBool(pl, 'wmp', 'windowlessvideo');
                setStr(pl, 'wmp', 'balance');
                setStr(pl, 'wmp', 'baseurl');
                setStr(pl, 'wmp', 'captioningid');
                setStr(pl, 'wmp', 'currentmarker');
                setStr(pl, 'wmp', 'currentposition');
                setStr(pl, 'wmp', 'defaultframe');
                setStr(pl, 'wmp', 'playcount');
                setStr(pl, 'wmp', 'rate');
                setStr(pl, 'wmp', 'uimode');
                setStr(pl, 'wmp', 'volume');
            break;
            case "rmp":
                setBool(pl, 'rmp', 'autostart');
                setBool(pl, 'rmp', 'loop');
                setBool(pl, 'rmp', 'autogotourl');
                setBool(pl, 'rmp', 'center');
                setBool(pl, 'rmp', 'imagestatus');
                setBool(pl, 'rmp', 'maintainaspect');
                setBool(pl, 'rmp', 'nojava');
                setBool(pl, 'rmp', 'prefetch');
                setBool(pl, 'rmp', 'shuffle');
                setStr(pl, 'rmp', 'console');
                setStr(pl, 'rmp', 'controls');
                setStr(pl, 'rmp', 'numloop');
                setStr(pl, 'rmp', 'scriptcallbacks');
            break;
        }
        setStr(pl, null, 'src');
        setStr(pl, null, 'id');
        setStr(pl, null, 'name');
        setStr(pl, null, 'vspace');
        setStr(pl, null, 'hspace');
        setStr(pl, null, 'bgcolor');
        setStr(pl, null, 'align');
        setStr(pl, null, 'width');
        setStr(pl, null, 'height');
        if ((val = tinyMCE.getAttrib(fe, "width")) != "")
            pl.width = f.width.value = val;
        if ((val = tinyMCE.getAttrib(fe, "height")) != "")
            pl.height = f.height.value = val;
        oldWidth = pl.width ? parseInt(pl.width) : 0;
        oldHeight = pl.height ? parseInt(pl.height) : 0;
    } else
        oldWidth = oldHeight = 0;
    selectByValue(f, 'media_type', type);
    changedType(type);
    updateColor('bgcolor_pick', 'bgcolor');
    TinyMCE_EditableSelects.init();
    generatePreview();
}
function insertMedia() {
    var fe, f = document.forms[0], h;
    if (!AutoValidator.validate(f)) {
        alert(tinyMCE.getLang('lang_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'))) {
        switch (f.media_type.options[f.media_type.selectedIndex].value) {
            case "flash":
                fe.className = "mceItemFlash";
                break;
            case "shockwave":
                fe.className = "mceItemShockWave";
                break;
            case "qt":
                fe.className = "mceItemQuickTime";
                break;
            case "wmp":
                fe.className = "mceItemWindowsMedia";
                break;
            case "rmp":
                fe.className = "mceItemRealMedia";
                break;
        }
        if (fe.width != f.width.value || fe.height != f.height.height)
            tinyMCE.selectedInstance.repaint();
        fe.title = serializeParameters();
        fe.width = f.width.value;
        fe.height = f.height.value;
        fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');
        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"' ;
        switch (f.media_type.options[f.media_type.selectedIndex].value) {
            case "flash":
                h += ' class="mceItemFlash"';
                break;
            case "shockwave":
                h += ' class="mceItemShockWave"';
                break;
            case "qt":
                h += ' class="mceItemQuickTime"';
                break;
            case "wmp":
                h += ' class="mceItemWindowsMedia"';
                break;
            case "rmp":
                h += ' class="mceItemRealMedia"';
                break;
        }
        h += ' title="' + serializeParameters() + '"';
        h += ' width="' + f.width.value + '"';
        h += ' height="' + f.height.value + '"';
        h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';
        h += ' />';
        tinyMCE.selectedInstance.execCommand('mceInsertContent', false, h);
    }
    tinyMCEPopup.close();
}
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 += '<option value="">---</option>';
        for (var i=0; i<tinyMCEMediaList.length; i++)
            html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
        html += '</select>';
        return html;
    }
    return "";
}
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(';');
    // YouTube
    if (v.indexOf('http://www.youtube.com/watch?v=') == 0 || v.indexOf('http://youtube.com/watch?v=') == 0) {
        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;
        return 'flash';
    }
    // Google video
    if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {
        f.width.value = '425';
        f.height.value = '326';
        f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';
        return 'flash';
    }
    for (i=0; i<fo.length; i++) {
        c = fo[i].split('=');
        el = c[1].split(',');
        for (x=0; x<el.length; x++)
        if (v.indexOf('.' + el[x]) != -1)
            return c[0];
    }
    return null;
}
function switchType(v) {
    var t = getType(v), d = document, f = d.forms[0];
    if (!t)
        return;
    selectByValue(d.forms[0], 'media_type', t);
    changedType(t);
    // Update qtsrc also
    if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
        alert(tinyMCE.getLang("lang_media_qt_stream_warn"));
        if (f.qt_qtsrc.value == '')
            f.qt_qtsrc.value = f.src.value;
    }
}
function changedType(t) {
    var d = document;
    d.getElementById('flash_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';
    d.getElementById('rmp_options').style.display = 'none';
    d.getElementById(t + '_options').style.display = 'block';
}
function serializeParameters() {
    var d = document, f = d.forms[0], s = '';
    switch (f.media_type.options[f.media_type.selectedIndex].value) {
        case "flash":
            s += getBool('flash', 'play', true);
            s += getBool('flash', 'loop', true);
            s += getBool('flash', 'menu', true);
            s += getBool('flash', 'swliveconnect', false);
            s += getStr('flash', 'quality');
            s += getStr('flash', 'scale');
            s += getStr('flash', 'salign');
            s += getStr('flash', 'wmode');
            s += getStr('flash', 'base');
            s += getStr('flash', 'flashvars');
        break;
        case "qt":
            s += getBool('qt', 'loop', false);
            s += getBool('qt', 'autoplay', true);
            s += getBool('qt', 'cache', false);
            s += getBool('qt', 'controller', true);
            s += getBool('qt', 'correction', false, 'none', 'full');
            s += getBool('qt', 'enablejavascript', false);
            s += getBool('qt', 'kioskmode', false);
            s += getBool('qt', 'autohref', false);
            s += getBool('qt', 'playeveryframe', false);
            s += getBool('qt', 'targetcache', false);
            s += getStr('qt', 'scale');
            s += getStr('qt', 'starttime');
            s += getStr('qt', 'endtime');
            s += getStr('qt', 'target');
            s += getStr('qt', 'qtsrcchokespeed');
            s += getStr('qt', 'volume');
            s += getStr('qt', 'qtsrc');
        break;
        case "shockwave":
            s += getBool('shockwave', 'sound');
            s += getBool('shockwave', 'progress');
            s += getBool('shockwave', 'autostart');
            s += getBool('shockwave', 'swliveconnect');
            s += getStr('shockwave', 'swvolume');
            s += getStr('shockwave', 'swstretchstyle');
            s += getStr('shockwave', 'swstretchhalign');
            s += getStr('shockwave', 'swstretchvalign');
        break;
        case "wmp":
            s += getBool('wmp', 'autostart', true);
            s += getBool('wmp', 'enabled', false);
            s += getBool('wmp', 'enablecontextmenu', true);
            s += getBool('wmp', 'fullscreen', false);
            s += getBool('wmp', 'invokeurls', true);
            s += getBool('wmp', 'mute', false);
            s += getBool('wmp', 'stretchtofit', false);
            s += getBool('wmp', 'windowlessvideo', false);
            s += getStr('wmp', 'balance');
            s += getStr('wmp', 'baseurl');
            s += getStr('wmp', 'captioningid');
            s += getStr('wmp', 'currentmarker');
            s += getStr('wmp', 'currentposition');
            s += getStr('wmp', 'defaultframe');
            s += getStr('wmp', 'playcount');
            s += getStr('wmp', 'rate');
            s += getStr('wmp', 'uimode');
            s += getStr('wmp', 'volume');
        break;
        case "rmp":
            s += getBool('rmp', 'autostart', false);
            s += getBool('rmp', 'loop', false);
            s += getBool('rmp', 'autogotourl', true);
            s += getBool('rmp', 'center', false);
            s += getBool('rmp', 'imagestatus', true);
            s += getBool('rmp', 'maintainaspect', false);
            s += getBool('rmp', 'nojava', false);
            s += getBool('rmp', 'prefetch', false);
            s += getBool('rmp', 'shuffle', false);
            s += getStr('rmp', 'console');
            s += getStr('rmp', 'controls');
            s += getStr('rmp', 'numloop');
            s += getStr('rmp', 'scriptcallbacks');
        break;
    }
    s += getStr(null, 'id');
    s += getStr(null, 'name');
    s += getStr(null, 'src');
    s += getStr(null, 'align');
    s += getStr(null, 'bgcolor');
    s += getInt(null, 'vspace');
    s += getInt(null, 'hspace');
    s += getStr(null, 'width');
    s += getStr(null, 'height');
    s = s.length > 0 ? s.substring(0, s.length - 1) : s;
    return s;
}
function setBool(pl, p, n) {
    if (typeof(pl[n]) == "undefined")
        return;
    document.forms[0].elements[p + "_" + n].checked = pl[n];
}
function setStr(pl, p, n) {
    var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];
    if (typeof(pl[n]) == "undefined")
        return;
    if (e.type == "text")
        e.value = pl[n];
    else
        selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);
}
function getBool(p, n, d, tv, fv) {
    var v = document.forms[0].elements[p + "_" + n].checked;
    tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
    fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
    return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');
}
function getStr(p, n, d) {
    var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
    var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
    return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");
}
function getInt(p, n, d) {
    var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
    var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
    return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");
}
function jsEncode(s) {
    s = s.replace(new RegExp('\\\\', 'g'), '\\\\');
    s = s.replace(new RegExp('"', 'g'), '\\"');
    s = s.replace(new RegExp("'", 'g'), "\\'");
    return s;
}
function generatePreview(c) {
    var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;
    p.innerHTML = '<!-- x --->';
    nw = parseInt(f.width.value);
    nh = parseInt(f.height.value);
    if (f.width.value != "" && f.height.value != "") {
        if (f.constrain.checked) {
            if (c == 'width' && oldWidth != 0) {
                wp = nw / oldWidth;
                nh = Math.round(wp * nh);
                f.height.value = nh;
            } else if (c == 'height' && oldHeight != 0) {
                hp = nh / oldHeight;
                nw = Math.round(hp * nw);
                f.width.value = nw;
            }
        }
    }
    if (f.width.value != "")
        oldWidth = nw;
    if (f.height.value != "")
        oldHeight = nh;
    // After constrain
    pl = serializeParameters();
    switch (f.media_type.options[f.media_type.selectedIndex].value) {
        case "flash":
            cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
            codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
            type = 'application/x-shockwave-flash';
            break;
        case "shockwave":
            cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';
            codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
            type = 'application/x-director';
            break;
        case "qt":
            cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
            codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
            type = 'video/quicktime';
            break;
        case "wmp":
            cls = tinyMCE.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;
        case "rmp":
            cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
            codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
            type = 'audio/x-pn-realaudio-plugin';
            break;
    }
    if (pl == '') {
        p.innerHTML = '';
        return;
    }
    pl = eval('x={' + pl + '};');
    if (!pl.src) {
        p.innerHTML = '';
        return;
    }
    pl.src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], pl.src);
    pl.width = !pl.width ? 100 : pl.width;
    pl.height = !pl.height ? 100 : pl.height;
    pl.id = !pl.id ? 'obj' : pl.id;
    pl.name = !pl.name ? 'eobj' : pl.name;
    pl.align = !pl.align ? '' : pl.align;
    h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';
    for (n in pl) {
        h += '<param name="' + n + '" value="' + pl[n] + '">';
        // Add extra url parameter if it's an absolute URL
        if (n == 'src' && pl[n].indexOf('://') != -1)
            h += '<param name="url" value="' + pl[n] + '" />';
    }
    h += '<embed type="' + type + '" ';
    for (n in pl)
        h += n + '="' + pl[n] + '" ';
    h += '></embed></object>';
    p.innerHTML = "<!-- x --->" + h;
}
tinyMCEPopup.requireLangPack();
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 = ed.selection.getNode();
    if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {
        pl = fe.title;
        switch (ed.dom.getAttrib(fe, 'class')) {
            case 'mceItemFlash':
                type = 'flash';
                break;
            case 'mceItemFlashVideo':
                type = 'flv';
                break;
            case 'mceItemShockWave':
                type = 'shockwave';
                break;
            case 'mceItemWindowsMedia':
                type = 'wmp';
                break;
            case 'mceItemQuickTime':
                type = 'qt';
                break;
            case 'mceItemRealMedia':
                type = 'rmp';
                break;
        }
        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('medialist','src','media','media');
    if (html == "")
        document.getElementById("linklistrow").style.display = 'none';
    else
        document.getElementById("linklistcontainer").innerHTML = html;
    // Resize some elements
    if (isVisible('filebrowser'))
        document.getElementById('src').style.width = '230px';
    // Setup form
    if (pl != "") {
        pl = tinyMCEPopup.editor.plugins.media._parse(pl);
        switch (type) {
            case "flash":
                setBool(pl, 'flash', 'play');
                setBool(pl, 'flash', 'loop');
                setBool(pl, 'flash', 'menu');
                setBool(pl, 'flash', 'swliveconnect');
                setStr(pl, 'flash', 'quality');
                setStr(pl, 'flash', 'scale');
                setStr(pl, 'flash', 'salign');
                setStr(pl, 'flash', 'wmode');
                setStr(pl, 'flash', 'base');
                setStr(pl, 'flash', 'flashvars');
            break;
            case "qt":
                setBool(pl, 'qt', 'loop');
                setBool(pl, 'qt', 'autoplay');
                setBool(pl, 'qt', 'cache');
                setBool(pl, 'qt', 'controller');
                setBool(pl, 'qt', 'correction');
                setBool(pl, 'qt', 'enablejavascript');
                setBool(pl, 'qt', 'kioskmode');
                setBool(pl, 'qt', 'autohref');
                setBool(pl, 'qt', 'playeveryframe');
                setBool(pl, 'qt', 'tarsetcache');
                setStr(pl, 'qt', 'scale');
                setStr(pl, 'qt', 'starttime');
                setStr(pl, 'qt', 'endtime');
                setStr(pl, 'qt', 'tarset');
                setStr(pl, 'qt', 'qtsrcchokespeed');
                setStr(pl, 'qt', 'volume');
                setStr(pl, 'qt', 'qtsrc');
            break;
            case "shockwave":
                setBool(pl, 'shockwave', 'sound');
                setBool(pl, 'shockwave', 'progress');
                setBool(pl, 'shockwave', 'autostart');
                setBool(pl, 'shockwave', 'swliveconnect');
                setStr(pl, 'shockwave', 'swvolume');
                setStr(pl, 'shockwave', 'swstretchstyle');
                setStr(pl, 'shockwave', 'swstretchhalign');
                setStr(pl, 'shockwave', 'swstretchvalign');
            break;
            case "wmp":
                setBool(pl, 'wmp', 'autostart');
                setBool(pl, 'wmp', 'enabled');
                setBool(pl, 'wmp', 'enablecontextmenu');
                setBool(pl, 'wmp', 'fullscreen');
                setBool(pl, 'wmp', 'invokeurls');
                setBool(pl, 'wmp', 'mute');
                setBool(pl, 'wmp', 'stretchtofit');
                setBool(pl, 'wmp', 'windowlessvideo');
                setStr(pl, 'wmp', 'balance');
                setStr(pl, 'wmp', 'baseurl');
                setStr(pl, 'wmp', 'captioningid');
                setStr(pl, 'wmp', 'currentmarker');
                setStr(pl, 'wmp', 'currentposition');
                setStr(pl, 'wmp', 'defaultframe');
                setStr(pl, 'wmp', 'playcount');
                setStr(pl, 'wmp', 'rate');
                setStr(pl, 'wmp', 'uimode');
                setStr(pl, 'wmp', 'volume');
            break;
            case "rmp":
                setBool(pl, 'rmp', 'autostart');
                setBool(pl, 'rmp', 'loop');
                setBool(pl, 'rmp', 'autogotourl');
                setBool(pl, 'rmp', 'center');
                setBool(pl, 'rmp', 'imagestatus');
                setBool(pl, 'rmp', 'maintainaspect');
                setBool(pl, 'rmp', 'nojava');
                setBool(pl, 'rmp', 'prefetch');
                setBool(pl, 'rmp', 'shuffle');
                setStr(pl, 'rmp', 'console');
                setStr(pl, 'rmp', 'controls');
                setStr(pl, 'rmp', 'numloop');
                setStr(pl, 'rmp', 'scriptcallbacks');
            break;
        }
        setStr(pl, null, 'src');
        setStr(pl, null, 'id');
        setStr(pl, null, 'name');
        setStr(pl, null, 'vspace');
        setStr(pl, null, 'hspace');
        setStr(pl, null, 'bgcolor');
        setStr(pl, null, 'align');
        setStr(pl, null, 'width');
        setStr(pl, null, 'height');
        if ((val = ed.dom.getAttrib(fe, "width")) != "")
            pl.width = f.width.value = val;
        if ((val = ed.dom.getAttrib(fe, "height")) != "")
            pl.height = f.height.value = val;
        oldWidth = pl.width ? parseInt(pl.width) : 0;
        oldHeight = pl.height ? parseInt(pl.height) : 0;
    } else
        oldWidth = oldHeight = 0;
    selectByValue(f, 'media_type', type);
    changedType(type);
    updateColor('bgcolor_pick', 'bgcolor');
    TinyMCE_EditableSelects.init();
    generatePreview();
}
function insertMedia() {
    var fe, f = document.forms[0], h;
    tinyMCEPopup.restoreSelection();
    if (!AutoValidator.validate(f)) {
        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 = 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":
                fe.className = "mceItemShockWave";
                break;
            case "qt":
                fe.className = "mceItemQuickTime";
                break;
            case "wmp":
                fe.className = "mceItemWindowsMedia";
                break;
            case "rmp":
                fe.className = "mceItemRealMedia";
                break;
        }
        if (fe.width != f.width.value || fe.height != f.height.height)
            ed.execCommand('mceRepaint');
        fe.title = serializeParameters();
        fe.width = f.width.value;
        fe.height = f.height.value;
        fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');
        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="' + 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":
                h += ' class="mceItemShockWave"';
                break;
            case "qt":
                h += ' class="mceItemQuickTime"';
                break;
            case "wmp":
                h += ' class="mceItemWindowsMedia"';
                break;
            case "rmp":
                h += ' class="mceItemRealMedia"';
                break;
        }
        h += ' title="' + serializeParameters() + '"';
        h += ' width="' + f.width.value + '"';
        h += ' height="' + f.height.value + '"';
        h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';
        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" onchange="this.form.src.value=this.options[this.selectedIndex].value;updatePreview();">';
        html += '<option value="">---</option>';
        for (var i=0; i<tinyMCEMediaList.length; i++)
            html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';
        html += '</select>';
        return html;
    }
    return "";
}
function getType(v) {
    var fo, i, c, el, x, f = document.forms[0];
    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.match(/watch\?v=(.+)(.*)/)) {
        f.width.value = '425';
        f.height.value = '350';
        f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1];
        return 'flash';
    }
    // Google video
    if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {
        f.width.value = '425';
        f.height.value = '326';
        f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';
        return 'flash';
    }
    for (i=0; i<fo.length; i++) {
        c = fo[i].split('=');
        el = c[1].split(',');
        for (x=0; x<el.length; x++)
        if (v.indexOf('.' + el[x]) != -1)
            return c[0];
    }
    return null;
}
function switchType(v) {
    var t = getType(v), d = document, f = d.forms[0];
    if (!t)
        return;
    selectByValue(d.forms[0], 'media_type', t);
    changedType(t);
    // Update qtsrc also
    if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {
        alert(ed.getLang("media_qt_stream_warn"));
        if (f.qt_qtsrc.value == '')
            f.qt_qtsrc.value = f.src.value;
    }
}
function changedType(t) {
    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';
    d.getElementById('rmp_options').style.display = 'none';
    d.getElementById(t + '_options').style.display = 'block';
}
function serializeParameters() {
    var d = document, f = d.forms[0], s = '';
    switch (f.media_type.options[f.media_type.selectedIndex].value) {
        case "flash":
            s += getBool('flash', 'play', true);
            s += getBool('flash', 'loop', true);
            s += getBool('flash', 'menu', true);
            s += getBool('flash', 'swliveconnect', false);
            s += getStr('flash', 'quality');
            s += getStr('flash', 'scale');
            s += getStr('flash', 'salign');
            s += getStr('flash', 'wmode');
            s += getStr('flash', 'base');
            s += getStr('flash', 'flashvars');
        break;
        case "qt":
            s += getBool('qt', 'loop', false);
            s += getBool('qt', 'autoplay', true);
            s += getBool('qt', 'cache', false);
            s += getBool('qt', 'controller', true);
            s += getBool('qt', 'correction', false, 'none', 'full');
            s += getBool('qt', 'enablejavascript', false);
            s += getBool('qt', 'kioskmode', false);
            s += getBool('qt', 'autohref', false);
            s += getBool('qt', 'playeveryframe', false);
            s += getBool('qt', 'targetcache', false);
            s += getStr('qt', 'scale');
            s += getStr('qt', 'starttime');
            s += getStr('qt', 'endtime');
            s += getStr('qt', 'target');
            s += getStr('qt', 'qtsrcchokespeed');
            s += getStr('qt', 'volume');
            s += getStr('qt', 'qtsrc');
        break;
        case "shockwave":
            s += getBool('shockwave', 'sound');
            s += getBool('shockwave', 'progress');
            s += getBool('shockwave', 'autostart');
            s += getBool('shockwave', 'swliveconnect');
            s += getStr('shockwave', 'swvolume');
            s += getStr('shockwave', 'swstretchstyle');
            s += getStr('shockwave', 'swstretchhalign');
            s += getStr('shockwave', 'swstretchvalign');
        break;
        case "wmp":
            s += getBool('wmp', 'autostart', true);
            s += getBool('wmp', 'enabled', false);
            s += getBool('wmp', 'enablecontextmenu', true);
            s += getBool('wmp', 'fullscreen', false);
            s += getBool('wmp', 'invokeurls', true);
            s += getBool('wmp', 'mute', false);
            s += getBool('wmp', 'stretchtofit', false);
            s += getBool('wmp', 'windowlessvideo', false);
            s += getStr('wmp', 'balance');
            s += getStr('wmp', 'baseurl');
            s += getStr('wmp', 'captioningid');
            s += getStr('wmp', 'currentmarker');
            s += getStr('wmp', 'currentposition');
            s += getStr('wmp', 'defaultframe');
            s += getStr('wmp', 'playcount');
            s += getStr('wmp', 'rate');
            s += getStr('wmp', 'uimode');
            s += getStr('wmp', 'volume');
        break;
        case "rmp":
            s += getBool('rmp', 'autostart', false);
            s += getBool('rmp', 'loop', false);
            s += getBool('rmp', 'autogotourl', true);
            s += getBool('rmp', 'center', false);
            s += getBool('rmp', 'imagestatus', true);
            s += getBool('rmp', 'maintainaspect', false);
            s += getBool('rmp', 'nojava', false);
            s += getBool('rmp', 'prefetch', false);
            s += getBool('rmp', 'shuffle', false);
            s += getStr('rmp', 'console');
            s += getStr('rmp', 'controls');
            s += getStr('rmp', 'numloop');
            s += getStr('rmp', 'scriptcallbacks');
        break;
    }
    s += getStr(null, 'id');
    s += getStr(null, 'name');
    s += getStr(null, 'src');
    s += getStr(null, 'align');
    s += getStr(null, 'bgcolor');
    s += getInt(null, 'vspace');
    s += getInt(null, 'hspace');
    s += getStr(null, 'width');
    s += getStr(null, 'height');
    s = s.length > 0 ? s.substring(0, s.length - 1) : s;
    return s;
}
function setBool(pl, p, n) {
    if (typeof(pl[n]) == "undefined")
        return;
    document.forms[0].elements[p + "_" + n].checked = pl[n];
}
function setStr(pl, p, n) {
    var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];
    if (typeof(pl[n]) == "undefined")
        return;
    if (e.type == "text")
        e.value = pl[n];
    else
        selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);
}
function getBool(p, n, d, tv, fv) {
    var v = document.forms[0].elements[p + "_" + n].checked;
    tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
    fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
    return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ',');
}
function getStr(p, n, d) {
    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) + "',");
}
function getInt(p, n, d) {
    var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];
    var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;
    return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");
}
function jsEncode(s) {
    s = s.replace(new RegExp('\\\\', 'g'), '\\\\');
    s = s.replace(new RegExp('"', 'g'), '\\"');
    s = s.replace(new RegExp("'", 'g'), "\\'");
    return s;
}
function generatePreview(c) {
    var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;
    p.innerHTML = '<!-- x --->';
    nw = parseInt(f.width.value);
    nh = parseInt(f.height.value);
    if (f.width.value != "" && f.height.value != "") {
        if (f.constrain.checked) {
            if (c == 'width' && oldWidth != 0) {
                wp = nw / oldWidth;
                nh = Math.round(wp * nh);
                f.height.value = nh;
            } else if (c == 'height' && oldHeight != 0) {
                hp = nh / oldHeight;
                nw = Math.round(hp * nw);
                f.width.value = nw;
            }
        }
    }
    if (f.width.value != "")
        oldWidth = nw;
    if (f.height.value != "")
        oldHeight = nh;
    // After constrain
    pl = serializeParameters();
    switch (f.media_type.options[f.media_type.selectedIndex].value) {
        case "flash":
            cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
            codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';
            type = 'application/x-shockwave-flash';
            break;
        case "shockwave":
            cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';
            codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';
            type = 'application/x-director';
            break;
        case "qt":
            cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';
            codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';
            type = 'video/quicktime';
            break;
        case "wmp":
            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;
        case "rmp":
            cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';
            codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';
            type = 'audio/x-pn-realaudio-plugin';
            break;
    }
    if (pl == '') {
        p.innerHTML = '';
        return;
    }
    pl = tinyMCEPopup.editor.plugins.media._parse(pl);
    if (!pl.src) {
        p.innerHTML = '';
        return;
    }
    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;
    pl.name = !pl.name ? 'eobj' : pl.name;
    pl.align = !pl.align ? '' : pl.align;
    h += '<object classid="clsid:' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';
    for (n in pl) {
        h += '<param name="' + n + '" value="' + pl[n] + '">';
        // Add extra url parameter if it's an absolute URL
        if (n == 'src' && pl[n].indexOf('://') != -1)
            h += '<param name="url" value="' + pl[n] + '" />';
    }
    h += '<embed type="' + type + '" ';
    for (n in pl)
        h += n + '="' + pl[n] + '" ';
    h += '></embed></object>';
    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>
                                    </tr>
                                </table>
                                    <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">{#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 = {
    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
        };
    },
            t.editor = ed;
    getControlHTML : function(cn) {
        switch (cn) {
            case "nonbreaking":
                return tinyMCE.getButtonHTML(cn, 'lang_nonbreaking_desc', '{$pluginurl}/images/nonbreaking.gif', 'mceNonBreaking', false);
            // 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
            };
        }
        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;}
.panel_wrapper { height: 85px; }
.panel_wrapper div.current { height: 85px; }
/* MS IE only styles */
* 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); }
/* IE */
* html .panel_wrapper {height:100px;}
* html .panel_wrapper div.current {height:100px;}
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 = {
    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
        };
    },
            // Register commands
            ed.addCommand('mceSearch', function() {
                open('search');
            });
    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
    },
            ed.addCommand('mceReplace', function() {
                open('replace');
            });
    getControlHTML : function (cn) {
        switch (cn) {
            case "search" :
                return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_search_desc', '{$pluginurl}/images/search.gif','mceSearch', true);
            // Register buttons
            ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});
            ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});
            case "replace" :
                return tinyMCE.getButtonHTML(cn, 'lang_searchreplace_replace_desc', '{$pluginurl}/images/replace.gif', 'mceSearchReplace', true);
            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
            };
        }
    });
        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://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',
                version : tinymce.majorVersion + "." + tinymce.minorVersion
            };
        },
    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
        };
    },
        init : function(ed, url) {
            var t = this, cm;
    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;
            t.url = url;
            t.editor = ed;
        // Handle click on word
        if ((e.type == "click" || e.type == "contextmenu") && elm) {
            do {
                if (tinyMCE.getAttrib(elm, 'class') == "mceItemHiddenSpellWord") {
                    inst.spellCheckerElm = elm;
                    // 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>';
        } 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;
        // 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)}));
            // 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 {
                            ed.setProgressState(0);
                            ed.windowManager.alert('spellchecker.no_mpell');
                        }
                    });
                } 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);
            });
    _getWordSeparators : function() {
        var i, re = '', ch = tinyMCE.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
            ed.onSetContent.add(function() {
                t._done();
            });
        for (i=0; i<ch.length; i++)
            re += '\\' + ch.charAt(i);
            ed.onBeforeGetContent.add(function() {
                t._done();
            });
        return re;
    },
            ed.onBeforeExecCommand.add(function(ed, cmd) {
                if (cmd == 'mceFullScreen')
                    t._done();
            });
    _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;
            // 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;
            }
        },
            if (!s && nl[i].length > 0)
                wl[wl.length] = nl[i];
        }
        // Internal functions
        return wl.join(' ');
    },
        _walk : function(n, f) {
            var d = this.editor.getDoc(), w;
    _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;
            if (d.createTreeWalker) {
                w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
        word = typeof(word) == 'undefined' ? null : word;
                while ((n = w.nextNode()) != null)
                    f.call(this, n);
            } else
                tinymce.walk(n, f, 'childNodes');
        },
        for (i=nl.length-1; i>=0; i--) {
            c = tinyMCE.getAttrib(nl[i], 'class');
        _getSeparators : function() {
            var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');
            if ((c == 'mceItemHiddenSpellWord' || c == 'mceItemHidden') && (word == null || nl[i].innerHTML == word))
                self._removeWord(nl[i]);
        }
            // Build word separator regexp
            for (i=0; i<str.length; i++)
                re += '\\' + str.charAt(i);
        if (b)
            inst.selection.moveToBookmark(b);
    },
            return re;
        },
    _checkDone : function(inst) {
        var self = TinyMCE_SpellCheckerPlugin;
        var w = self._countWords(inst);
        _getWords : function() {
            var ed = this.editor, wl = [], tx = '', lo = {};
        if (w == 0) {
            self._removeWords(inst.getDoc());
            inst.spellcheckerOn = false;
            tinyMCE.switchClass(inst.editorId + '_spellchecker', 'mceMenuButton');
        }
    },
            // Get area text
            this._walk(ed.getBody(), function(n) {
                if (n.nodeType == 3)
                    tx += n.nodeValue + ' ';
            });
    _countWords : function(inst) {
        var i, w = 0, nl = inst.getDoc().getElementsByTagName("span"), c;
        var self = TinyMCE_SpellCheckerPlugin;
            // Split words by separator
            tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');
            tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));
        for (i=nl.length-1; i>=0; i--) {
            c = tinyMCE.getAttrib(nl[i], 'class');
            // Build word array and remove duplicates
            each(tx.split(' '), function(v) {
                if (!lo[v]) {
                    wl.push(v);
                    lo[v] = 1;
                }
            });
            if (c == 'mceItemHiddenSpellWord')
                w++;
        }
            return wl;
        },
        return w;
    },
        _removeWords : function(w) {
            var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();
    _removeWord : function(e) {
        if (e != null)
            tinyMCE.setOuterHTML(e, e.innerHTML);
    },
            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);
                }
            });
    _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();
            se.moveToBookmark(b);
        },
        for (i=0; i<wl.length; i++) {
            if (wl[i].length > 0)
                w += wl[i] + ((i == wl.length-1) ? '' : '|');
        }
        _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();
        for (i=0; i<nl.length; i++) {
            nv = nl[i].nodeValue;
            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');
            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);
        },
        _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());
                //p2 = DOM.getPos(ed.getContainer());
                m = ed.controlManager.createDropMenu('spellcheckermenu', {
                    offset_x : p1.x,
                    offset_y : p1.y,
                    'class' : 'mceNoIcons'
                });
                t._menu = m;
            }
        }
    },
    _buildMenu : function(sg, max) {
        var i, self = TinyMCE_SpellCheckerPlugin, cm = self._contextMenu;
            if (dom.hasClass(e.target, 'mceItemHiddenSpellWord')) {
                m.removeAll();
                m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
        cm.clear();
                t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(e.target.innerHTML)], function(r) {
                    m.removeAll();
        if (sg != null) {
            cm.addTitle(tinyMCE.getLang('lang_spellchecker_sug', '', true));
                    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();
                            }});
                        });
            for (i=0; i<sg.length && i<max; i++)
                cm.addItem(sg[i], 'tinyMCE.execCommand("mceSpellCheckReplace",false,"' + sg[i] + '");');
                        m.addSeparator();
                    } else
                        m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);
            cm.addSeparator();
        } else
            cm.addTitle(tinyMCE.getLang('lang_spellchecker_no_sug', '', true));
                    m.add({
                        title : 'spellchecker.ignore_word',
                        onclick : function() {
                            dom.remove(e.target, 1);
                            t._checkDone();
                        }
                    });
        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_words',
                        onclick : function() {
                            t._removeWords(dom.decode(e.target.innerHTML));
                            t._checkDone();
                        }
                    });
        cm.update();
    },
                    m.update();
                });
    _getAjaxHTTP : function() {
        try {
            return new ActiveXObject('Msxml2.XMLHTTP')
        } catch (e) {
            try {
                return new ActiveXObject('Microsoft.XMLHTTP')
            } catch (e) {
                return new XMLHttpRequest();
                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));
                }
            });
        }
    },
    });
    /**
     * 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();
        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);
    }
};
// Register plugin
tinyMCE.addPlugin('spellchecker', TinyMCE_SpellCheckerPlugin);
    // Register plugin
    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
@@ -1,17 +1,17 @@
/* CSS file for cell dialog in the table plugin */
.panel_wrapper div.current {
    height: 200px;
}
.advfield {
    width: 200px;
}
#action {
    margin-bottom: 3px;
}
#class {
    width: 150px;
/* CSS file for cell dialog in the table plugin */
.panel_wrapper div.current {
    height: 200px;
}
.advfield {
    width: 200px;
}
#action {
    margin-bottom: 3px;
}
#class {
    width: 150px;
}
program/js/tiny_mce/plugins/table/css/row.css
@@ -1,25 +1,25 @@
/* CSS file for row dialog in the table plugin */
.panel_wrapper div.current {
    height: 200px;
}
.advfield {
    width: 200px;
}
#action {
    margin-bottom: 3px;
}
#rowtype,#align,#valign,#class,#height {
    width: 150px;
}
#height {
    width: 50px;
}
.col2 {
    padding-left: 20px;
}
/* CSS file for row dialog in the table plugin */
.panel_wrapper div.current {
    height: 200px;
}
.advfield {
    width: 200px;
}
#action {
    margin-bottom: 3px;
}
#rowtype,#align,#valign,#class,#height {
    width: 150px;
}
#height {
    width: 50px;
}
.col2 {
    padding-left: 20px;
}
program/js/tiny_mce/plugins/table/css/table.css
@@ -1,13 +1,13 @@
/* CSS file for table dialog in the table plugin */
.panel_wrapper div.current {
    height: 220px;
}
.advfield {
    width: 200px;
}
#class {
    width: 150px;
}
/* CSS file for table dialog in the table plugin */
.panel_wrapper div.current {
    height: 245px;
}
.advfield {
    width: 200px;
}
#class {
    width: 150px;
}
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,879 +1,913 @@
/**
 * $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;
        inst.tableRowClipboard = null;
    },
            // 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]});
            });
    /**
     * 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]);
            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();
        // 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 (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th')) {
                            m.removeAll();
            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 == '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();
                            }
        // Special tablecontrols
        if (control_name == "tablecontrols") {
            var html = "";
                            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();
                            }
            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");
                            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();
            return html;
        }
                            // 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 "";
    },
                            // 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'});
    /**
     * Executes the table commands.
     */
    execCommand : function(editor_id, element, command, user_interface, value) {
        // Is table command
        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);
                            // 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});
                    });
                }
            });
                inst.execCommand('mceBeginUndoLevel');
                TinyMCE_TablePlugin._doExecCommand(editor_id, element, command, user_interface, value);
                inst.execCommand('mceEndUndoLevel');
            // 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();
            });
                return true;
        }
            ed.onNodeChange.add(function(ed, cm, n) {
                var p = ed.dom.getParent(n, 'td,th,caption');
        // Pass to next handler in chain
        return false;
    },
                cm.setActive('table', !!p);
                if (p && p.nodeName === 'CAPTION')
                    p = null;
    handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) {
        var colspan = "1", rowspan = "1", tdElm;
                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);
            });
        var inst = tinyMCE.getInstanceById(editor_id);
            // 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>');
                });
            }
        },
        // 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');
        execCommand : function(cmd, ui, val) {
            var ed = this.editor, b;
        // 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');
            // Is table command
            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');
            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');
        }
    },
    // 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");
        var doc = inst.contentWindow.document;
        var tableBorder = tableElm ? tableElm.getAttribute("border") : "";
        // Get first TD if no TD found
        if (trElm && tdElm == null)
            tdElm = trElm.cells[0];
        // ------- Inner functions ---------
        function inArray(ar, v) {
            for (var i=0; i<ar.length; i++) {
                // Is array
                if (ar[i].length > 0 && inArray(ar[i], v))
                    return true;
                // Found value
                if (ar[i] == v)
                    return true;
            }
            // Pass to next handler in chain
            return false;
        }
        },
        function makeTD() {
            var newTD = doc.createElement("td");
            newTD.innerHTML = "&nbsp;";
        }
        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
            };
        },
        function getColRowSpan(td) {
            var colspan = tinyMCE.getAttrib(td, "colspan");
            var rowspan = tinyMCE.getAttrib(td, "rowspan");
        // Private plugin internal methods
            colspan = colspan == "" ? 1 : parseInt(colspan);
            rowspan = rowspan == "" ? 1 : parseInt(rowspan);
        /**
         * Executes the table commands.
         */
        _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") : "";
            return {colspan : colspan, rowspan : rowspan};
        }
            // Get first TD if no TD found
            if (trElm && tdElm == null)
                tdElm = trElm.cells[0];
        function getCellPos(grid, td) {
            var x, y;
            function inArray(ar, v) {
                for (var i=0; i<ar.length; i++) {
                    // Is array
                    if (ar[i].length > 0 && inArray(ar[i], v))
                        return true;
            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};
                    // Found value
                    if (ar[i] == v)
                        return true;
                }
                return false;
            }
            return null;
        }
            function select(dx, dy) {
                var td;
        function getCell(grid, row, col) {
            if (grid[row] && grid[row][col])
                return grid[row][col];
                grid = getTableGrid(tableElm);
                dx = dx || 0;
                dy = dy || 0;
                dx = Math.max(cpos.cellindex + dx, 0);
                dy = Math.max(cpos.rowindex + dy, 0);
            return null;
        }
                // Recalculate grid and select
                inst.execCommand('mceRepaint');
                td = getCell(grid, dy, dx);
        function getTableGrid(table) {
            var grid = new Array(), rows = table.rows, x, y, td, sd, xstart, x2, y2;
                if (td) {
                    inst.selection.select(td.firstChild || td);
                    inst.selection.collapse(1);
                }
            };
            for (y=0; y<rows.length; y++) {
                for (x=0; x<rows[y].cells.length; x++) {
                    td = rows[y].cells[x];
                    sd = getColRowSpan(td);
            function makeTD() {
                var newTD = doc.createElement("td");
                    // All ready filled
                    for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;
                if (!tinymce.isIE)
                    newTD.innerHTML = '<br mce_bogus="1"/>';
            }
                    // Fill box
                    for (y2=y; y2<y+sd['rowspan']; y2++) {
                        if (!grid[y2])
                            grid[y2] = new Array();
            function getColRowSpan(td) {
                var colspan = inst.dom.getAttrib(td, "colspan");
                var rowspan = inst.dom.getAttrib(td, "rowspan");
                        for (x2=xstart; x2<xstart+sd['colspan']; x2++)
                            grid[y2][x2] = td;
                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;
            }
            return grid;
        }
            function getCell(grid, row, col) {
                if (grid[row] && grid[row][col])
                    return grid[row][col];
        function trimRow(table, tr, td, new_tr) {
            var grid = getTableGrid(table), cpos = getCellPos(grid, td);
            var cells, lastElm;
                return null;
            }
            // Time to crop away some
            if (new_tr.cells.length != tr.childNodes.length) {
                cells = tr.childNodes;
                lastElm = null;
            function getTableGrid(table) {
                var grid = [], rows = table.rows, x, y, td, sd, xstart, x2, y2;
                for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {
                    var remove = true;
                    var sd = getColRowSpan(td);
                for (y=0; y<rows.length; y++) {
                    for (x=0; x<rows[y].cells.length; x++) {
                        td = rows[y].cells[x];
                        sd = getColRowSpan(td);
                    // Remove due to rowspan
                    if (inArray(cells, td)) {
                        new_tr.childNodes[x]._delete = true;
                    } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan
                        for (var i=x; i<x+td.colSpan; i++)
                            new_tr.childNodes[i]._delete = true;
                        // All ready filled
                        for (xstart = x; grid[y] && grid[y][xstart]; xstart++) ;
                        // Fill box
                        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;
                        }
                    }
                    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 grid;
            }
            return null;
        }
            function trimRow(table, tr, td, new_tr) {
                var grid = getTableGrid(table), cpos = getCellPos(grid, td);
                var cells, lastElm;
        function nextElm(node, names) {
            var namesAr = names.split(',');
                // Time to crop away some
                if (new_tr.cells.length != tr.childNodes.length) {
                    cells = tr.childNodes;
                    lastElm = null;
            while ((node = node.nextSibling) != null) {
                for (var i=0; i<namesAr.length; i++) {
                    if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )
                    for (var x=0; td = getCell(grid, cpos.rowindex, x); x++) {
                        var remove = true;
                        var sd = getColRowSpan(td);
                        // Remove due to rowspan
                        if (inArray(cells, td)) {
                            new_tr.childNodes[x]._delete = true;
                        } else if ((lastElm == null || td != lastElm) && sd.colspan > 1) { // Remove due to colspan
                            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;
            }
            return null;
        }
            function nextElm(node, names) {
                var namesAr = names.split(',');
        function deleteMarked(tbl) {
            if (tbl.rows == 0)
                return;
            var tr = tbl.rows[0];
            do {
                var next = nextElm(tr, "TR");
                // Delete row
                if (tr._delete) {
                    tr.parentNode.removeChild(tr);
                    continue;
                }
                // Delete cells
                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) {
            // Add rows
            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;
                        }
                while ((node = node.nextSibling) != null) {
                    for (var i=0; i<namesAr.length; i++) {
                        if (node.nodeName.toLowerCase() == namesAr[i].toLowerCase() )
                            return node;
                    }
                }
                if (newTD == null) {
                    newTD = doc.createElement("td");
                    newTD.innerHTML = "&nbsp;";
                }
                // Reset col/row span
                newTD.colSpan = 1;
                newTD.rowSpan = 1;
                newTR.appendChild(newTD);
                lastCell = tdElm;
                return null;
            }
            return newTR;
        }
            function deleteMarked(tbl) {
                if (tbl.rows == 0)
                    return;
        // ---- Commands -----
                var tr = tbl.rows[0];
                do {
                    var next = nextElm(tr, "TR");
        // Handle commands
        switch (command) {
            case "mceTableRowProps":
                if (trElm == null)
                    return true;
                    // Delete row
                    if (tr._delete) {
                        tr.parentNode.removeChild(tr);
                        continue;
                    }
                if (user_interface) {
                    // Setup template
                    var template = new Array();
                    // Delete cells
                    var td = tr.cells[0];
                    if (td.cells > 1) {
                        do {
                            var nexttd = nextElm(td, "TD,TH");
                    template['file'] = '../../plugins/table/row.htm';
                    template['width'] = 380;
                    template['height'] = 295;
                            if (td._delete)
                                td.parentNode.removeChild(td);
                        } while ((td = nexttd) != null);
                    }
                } while ((tr = next) != null);
            }
                    // 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);
            function addRows(td_elm, tr_elm, rowspan) {
                // Add rows
                td_elm.rowSpan = 1;
                var trNext = nextElm(tr_elm, "TR");
                for (var i=1; i<rowspan && trNext; i++) {
                    var newTD = doc.createElement("td");
                    // Open window
                    tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes"});
                    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");
                }
            }
                return true;
            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;
            case "mceTableCellProps":
                if (tdElm == null)
                    return true;
                for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) {
                    var newTD = null;
                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"});
                }
                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});
                }
                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":
                // No table just return (invalid command)
                if (!tableElm)
                    return true;
                // Table has a tbody use that reference
                // Changed logic by ApTest 2005.07.12 (www.aptest.com)
                // Now lookk at the focused element and take its parentNode.  That will be a tbody or a table.
                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;
                            // Create cells
                            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 (lastCell != tdElm) {
                        for (var i=0; i<tr.cells.length; i++) {
                            if (tdElm == tr.cells[i]) {
                                newTD = tdElm.cloneNode(true);
                                break;
                            }
                            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
                        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;
                            // Create cells
                            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); // Only collape on gecko
                        break;
                        case "mceTableDeleteRow":
                            if (!trElm || !tdElm)
                                return true;
                            var grid = getTableGrid(tableElm);
                            var cpos = getCellPos(grid, tdElm);
                            // 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);
                                return true;
                            }
                            // Move down row spanned cells
                            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);
                                }
                            }
                            // Delete cells
                            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;
                            // Recalculate grid and select
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko
                        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); // Only collape on gecko
                        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); // Only collape on gecko
                        break;
                        case "mceTableDeleteCol":
                            if (!trElm || !tdElm)
                                return true;
                            var grid = getTableGrid(tableElm);
                            var cpos = getCellPos(grid, tdElm);
                            var lastTDElm = null;
                            // 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);
                                return true;
                            }
                            // Delete cells
                            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;
                            // Recalculate grid and select
                            grid = getTableGrid(tableElm);
                            inst.selection.selectNode(getCell(grid, cpos.rowindex, 0), tinyMCE.isGecko, true); // Only collape on gecko
                        break;
                    case "mceTableSplitCells":
                        if (!trElm || !tdElm)
                            return true;
                        var spandata = getColRowSpan(tdElm);
                        var colspan = spandata["colspan"];
                        var rowspan = spandata["rowspan"];
                        // Needs splitting
                        if (colspan > 1 || rowspan > 1) {
                            // Generate cols
                            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);
                        }
                    }
                        // Apply visual aids
                        tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
                        break;
                    if (newTD == null) {
                        newTD = doc.createElement("td");
                    case "mceTableMergeCells":
                        var rows = new Array();
                        var sel = inst.getSel();
                        var grid = getTableGrid(tableElm);
                        if (!tinymce.isIE)
                            newTD.innerHTML = '<br mce_bogus="1"/>';
                    }
                        if (tinyMCE.isMSIE || sel.rangeCount == 1) {
                            if (user_interface) {
                                // Setup template
                                var template = new Array();
                                var sp = getColRowSpan(tdElm);
                    // Reset col/row span
                    newTD.colSpan = 1;
                    newTD.rowSpan = 1;
                                template['file'] = '../../plugins/table/merge_cells.htm';
                                template['width'] = 250;
                                template['height'] = 105 + (tinyMCE.isNS7 ? 25 : 0);
                    newTR.appendChild(newTD);
                                // 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);
                    lastCell = tdElm;
                }
                                // Open window
                                tinyMCE.openWindow(template, {editor_id : inst.editorId, inline : "yes", action : "update", numcols : sp.colspan, numrows : sp.rowspan});
                return newTR;
            }
                                return true;
                            } else {
                                var numRows = parseInt(value['numrows']);
                                var numCols = parseInt(value['numcols']);
            // ---- Commands -----
            // Handle commands
            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":
                    // No table just return (invalid command)
                    if (!tableElm)
                        return true;
                    // Table has a tbody use that reference
                    // Changed logic by ApTest 2005.07.12 (www.aptest.com)
                    // Now lookk at the focused element and take its parentNode.  That will be a tbody or a table.
                    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;
                                // Create cells
                                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;
                                // Create cells
                                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 (("" + numRows) == "NaN")
                                    numRows = 1;
                                // Only one row, remove whole table
                                if (grid.length == 1) {
                                    inst.dom.remove(inst.dom.getParent(tableElm, "table"));
                                    return true;
                                }
                                if (("" + numCols) == "NaN")
                                    numCols = 1;
                                // Move down row spanned cells
                                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);
                                    }
                                }
                                // Delete cells
                                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;
                                // Only one col, remove whole table
                                if (grid.length > 1 && grid[0].length <= 1) {
                                    inst.dom.remove(inst.dom.getParent(tableElm, "table"));
                                    return true;
                                }
                                // Delete cells
                                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"];
                            // Needs splitting
                            if (colspan > 1 || rowspan > 1) {
                                // Generate cols
                                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);
                            }
                            // Apply visual aids
                            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) {
                                    // Setup template
                                    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;
                                    // Get rows and cells
                                    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);
                                                // Within range
                                                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);
                                        });
                                    }
                                    //return true;
                                }
                            } else {
                                var cells = [];
                                var sel = inst.selection.getSel();
                                var lastTR = null;
                                var curRow = null;
                                var x1 = -1, y1 = -1, x2, y2;
                                // Only one cell selected, whats the point?
                                if (sel.rangeCount < 2)
                                    return true;
                                // Get all selected cells
                                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;
                                }
                                // Get rows and cells
                                var tRows = tableElm.rows;
                                for (var y=cpos.rowindex; y<grid.length; y++) {
                                    var rowCells = new Array();
                                for (var y=0; y<tRows.length; y++) {
                                    var rowCells = [];
                                    for (var x=cpos.cellindex; x<grid[y].length; x++) {
                                        var td = getCell(grid, y, x);
                                    for (var x=0; x<tRows[y].cells.length; x++) {
                                        var td = tRows[y].cells[x];
                                        if (td && !inArray(rows, td) && !inArray(rowCells, td)) {
                                            var cp = getCellPos(grid, td);
                                            // Within range
                                            if (cp.cellindex < cpos.cellindex+numCols && cp.rowindex < cpos.rowindex+numRows)
                                        for (var i=0; i<cells.length; i++) {
                                            if (td == cells[i]) {
                                                rowCells[rowCells.length] = td;
                                            }
                                        }
                                    }
@@ -881,193 +915,156 @@
                                        rows[rows.length] = rowCells;
                                }
                                //return true;
                            }
                        } else {
                            var cells = new Array();
                            var sel = inst.getSel();
                            var lastTR = null;
                            var curRow = null;
                            var x1 = -1, y1 = -1, x2, y2;
                                // Find selected cells in grid and box
                                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;
                            // Only one cell selected, whats the point?
                            if (sel.rangeCount < 2)
                                return true;
                                        for (var i=0; i<cells.length; i++) {
                                            if (grid[y][x] == cells[i]) {
                                                // Get start pos
                                                if (x1 == -1) {
                                                    x1 = x;
                                                    y1 = y;
                                                }
                            // Get all selected cells
                            for (var i=0; i<sel.rangeCount; i++) {
                                var rng = sel.getRangeAt(i);
                                var tdElm = rng.startContainer.childNodes[rng.startOffset];
                                                // Get end pos
                                                x2 = x;
                                                y2 = y;
                                if (!tdElm)
                                    break;
                                if (tdElm.nodeName == "TD")
                                    cells[cells.length] = tdElm;
                            }
                            // Get rows and cells
                            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;
                            }
                            // Find selected cells in grid and box
                            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]) {
                                            // Get start pos
                                            if (x1 == -1) {
                                                x1 = x;
                                                y1 = y;
                                                grid[y][x]._selected = true;
                                            }
                                        }
                                    }
                                }
                                            // Get end pos
                                            x2 = x;
                                            y2 = y;
                                            grid[y][x]._selected = true;
                                // Is there gaps, if so deny
                                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;
                                        }
                                    }
                                }
                            }
                            // Is there gaps, if so deny
                            for (var y=y1; y<=y2; y++) {
                                for (var x=x1; x<=x2; x++) {
                                    if (!grid[y][x]._selected) {
                            // Validate selection and get total rowspan and colspan
                            var rowSpan = 1, colSpan = 1;
                            // Validate horizontal and get total colspan
                            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;
                                    }
                                }
                            }
                        }
                        // Validate selection and get total rowspan and colspan
                        var rowSpan = 1, colSpan = 1;
                        // Validate horizontal and get total colspan
                        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'];
                                }
                                lastRowSpan = sd['rowspan'];
                                if (rowColSpan > colSpan)
                                    colSpan = rowColSpan;
                                lastRowSpan = -1;
                            }
                            if (rowColSpan > colSpan)
                                colSpan = rowColSpan;
                            // Validate vertical and get total rowspan
                            var lastColSpan = -1;
                            for (var x=0; x<rows[0].length; x++) {
                                var colRowSpan = 0;
                            lastRowSpan = -1;
                        }
                                for (var y=0; y<rows.length; y++) {
                                    var sd = getColRowSpan(rows[y][x]);
                        // Validate vertical and get total rowspan
                        var lastColSpan = -1;
                        for (var x=0; x<rows[0].length; x++) {
                            var colRowSpan = 0;
                                    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;
                            }
                            // Setup td
                            tdElm = rows[0][0];
                            tdElm.rowSpan = rowSpan;
                            tdElm.colSpan = colSpan;
                            // Merge cells
                            for (var y=0; y<rows.length; y++) {
                                var sd = getColRowSpan(rows[y][x]);
                                for (var x=0; x<rows[y].length; x++) {
                                    var html = rows[y][x].innerHTML;
                                    var chk = html.replace(/[ \t\r\n]/g, "");
                                colRowSpan += sd['rowspan'];
                                    if (chk != "<br/>" && chk != "<br>" && chk != '<br mce_bogus="1"/>' && (x+y > 0))
                                        tdElm.innerHTML += html;
                                if (lastColSpan != -1 && sd['colspan'] != lastColSpan) {
                                    alert("Invalid selection for merge.");
                                    return true;
                                }
                                    // Not current cell
                                    if (rows[y][x] != tdElm && !rows[y][x]._deleted) {
                                        var cpos = getCellPos(grid, rows[y][x]);
                                        var tr = rows[y][x].parentNode;
                                lastColSpan = sd['colspan'];
                            }
                                        tr.removeChild(rows[y][x]);
                                        rows[y][x]._deleted = true;
                            if (colRowSpan > rowSpan)
                                rowSpan = colRowSpan;
                                        // Empty TR, remove it
                                        if (!tr.hasChildNodes()) {
                                            tr.parentNode.removeChild(tr);
                            lastColSpan = -1;
                        }
                                            var lastCell = null;
                                            for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) {
                                                if (cellElm != lastCell && cellElm.rowSpan > 1)
                                                    cellElm.rowSpan--;
                        // Setup td
                        tdElm = rows[0][0];
                        tdElm.rowSpan = rowSpan;
                        tdElm.colSpan = colSpan;
                                                lastCell = cellElm;
                                            }
                        // Merge cells
                        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;
                                // Not current cell
                                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;
                                    // Empty TR, remove it
                                    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--;
                                        }
                                        if (tdElm.rowSpan > 1)
                                            tdElm.rowSpan--;
                                    }
                                }
                            }
                            // 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;
                        }
                        break;
                        tableElm = inst.dom.getParent(inst.selection.getNode(), "table");
                        inst.addVisual(tableElm);
                        inst.nodeChanged();
                    }
                    tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table");
                    tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
                    tinyMCE.triggerNodeChange();
                    inst.repaint();
                }
                return true;
            }
            return true;
            // Pass to next handler in chain
            return false;
        }
    });
        // 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);
            else
            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);
    html += makeAttrib('width', width);
    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 = {
    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
        };
    },
            t.editor = ed;
    initInstance : function(inst) {
        inst.visualChars = {
            state : false
        };
    },
            // Register commands
            ed.addCommand('mceVisualChars', t._toggleVisualChars, t);
    getControlHTML : function(cn) {
        switch (cn) {
            case "visualchars":
                return tinyMCE.getButtonHTML(cn, 'lang_visualchars_desc', '{$pluginurl}/images/visualchars.gif', 'mceVisualChars', false);
        }
            // Register buttons
            ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});
        return "";
    },
            ed.onBeforeGetContent.add(function(ed, o) {
                if (t.state) {
                    t.state = true;
                    t._toggleVisualChars();
                }
            });
        },
    execCommand : function(editor_id, element, command, user_interface, value) {
        var inst = tinyMCE.getInstanceById(editor_id);
        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
            };
        },
        switch (command) {
            case "mceVisualChars":
                this._toggleVisualChars(editor_id, inst);
                return true;
        }
        // Private methods
        return false;
    },
        _toggleVisualChars : function() {
            var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo;
    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);
        }
            t.state = !t.state;
            ed.controlManager.setActive('visualchars', t.state);
        return content;
    },
            if (t.state) {
                nl = [];
                tinymce.walk(b, function(n) {
                    if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)
                        nl.push(n);
                }, 'childNodes');
    // Private plugin internal methods
                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');
                });
    _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);
                for (i=0; i<nl.length; i++)
                    ed.dom.setOuterHTML(nl[i], nl[i].innerHTML.replace(/(&middot;|\u00b7)/g, '&nbsp;'), 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);
        }
    });
        //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">
            <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 $
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
/* Import theme specific language pack */
tinyMCE.importThemeLanguagePack('advanced');
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']
    ],
    _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',
    /**
     * Returns HTML code for the specificed control.
     */
    getControlHTML : function(button_name) {
        var i, x, but;
        // Lookup button in button list
        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));
        }
        // 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}']
                ];
                html += '<option value="">{$lang_theme_block}</option>';
                // 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>';
                    }
                }
                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 "";
    },
    /**
     * 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;
            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);
                // 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, ' ');
                return true;
        }
        return false;
    },
    /**
     * Editor instance template function.
     */
    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");
        // 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(';');
            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" : //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"
                };
                // 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":
                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);
                // Expire in a month
                if (tinyMCE.getParam("theme_advanced_resizing_use_cookie", true)) {
                    var expires = new Date();
                    expires.setTime(expires.getTime() + 3600000 * 24 * 30);
                    // 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;
        }
    },
    /**
     * Starts/stops the editor resizing.
     */
    _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) {
            // 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);
            }
            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);
// Add default buttons maps for advanced theme and all internal plugins
tinyMCE.addButtonMap(TinyMCE_AdvancedTheme._buttonMap);
/**
 * $Id: editor_template_src.js 766 2008-04-03 20:37:06Z spocke $
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
(function() {
    var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;
    // Tell it to load theme specific language pack(s)
    tinymce.ThemeManager.requireLangPack('advanced');
    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']
        },
        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);
            // 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);
                }
            });
            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;
            // 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;
                    }
                });
            }
*/
            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;
            // 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 (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'});
            }
            // 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;
                }
                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;
            }
            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;
                        // Measure container
                        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;
                        // Setup placeholder
                        p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'});
                        DOM.setStyles(p, {width : w, height : h});
                        // Replace with placeholder
                        DOM.hide(c);
                        DOM.show(p);
                        // Create internal resize obj
                        r = {
                            x : e.screenX,
                            y : e.screenY,
                            w : w,
                            h : h,
                            dx : null,
                            dy : null
                        };
                        // Start listening
                        mf = Event.add(DOM.doc, 'mousemove', function(e) {
                            var w, h;
                            // Calc delta values
                            r.dx = e.screenX - r.x;
                            r.dy = e.screenY - r.y;
                            // 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);
                            // Resize placeholder
                            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;
                            // Stop listening
                            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 = '';
                    // 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;
                            }
                            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;
                    //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,100 +1,86 @@
<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>
    <base target="_self" />
</head>
<body id="image" onload="tinyMCEPopup.executeOnLoad('init();');" style="display: none">
<form onsubmit="insertImage();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>
        </ul>
    </div>
    <div class="panel_wrapper">
        <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><table border="0" cellspacing="0" cellpadding="0">
                <tr>
                  <td><input id="src" name="src" type="text" value="" style="width: 200px" onchange="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><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>
              </select></td>
          </tr>
          <tr>
            <td nowrap="nowrap"><label for="width">{$lang_insert_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>
          </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>
          </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>
          </tr>
        </table>
        </div>
    </div>
    <div class="mceActionPanel">
        <div style="float: left">
            <input type="button" id="insert" name="insert" value="{$lang_insert}" onclick="insertImage();" />
        </div>
        <div style="float: right">
            <input type="button" id="cancel" name="cancel" value="{$lang_cancel}" onclick="tinyMCEPopup.close();" />
        </div>
    </div>
</form>
</body>
</html>
<!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>{#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" 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;">{#advanced_dlg.image_title}</a></span></li>
        </ul>
    </div>
    <div class="panel_wrapper">
        <div id="general_panel" class="panel current">
     <table border="0" cellpadding="4" cellspacing="0">
          <tr>
            <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" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
                  <td id="srcbrowsercontainer">&nbsp;</td>
                </tr>
              </table></td>
          </tr>
          <tr>
            <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">{#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">{#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">{#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">{#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">{#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>
    </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/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,10 +59,9 @@
};
function init() {
    var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color'));
    var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));
    if (tinyMCE.isMSIE)
        tinyMCEPopup.resizeToInnerSize();
    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,79 +22,41 @@
        <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><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><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>
            <td><select id="target_list" name="target_list"></select></td>
        </tr>
          <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 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 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>
          </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>
            <tr>
                <td><label for="class_list">{#class_name}</label></td>
                <td><select id="class_list" name="class_list"></select></td>
            </tr>
        </table>
        </div>
    </div>
    <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;
function TinyMCE_Popup() {
};
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;
    },
    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);
    },
    onLoad : function() {
        var dir, i, elms, body = document.body;
        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);
    },
    executeOnLoad : function(str) {
        if (tinyMCE.isOpera && parseFloat(opera.version()) < 9.5)
            this.onLoadEval = str;
        else
            eval(str);
    },
    resizeToInnerSize : function() {
        var i, doc, body, oldMargin, wrapper, iframe, nodes, dx, dy;
        // Netscape 7.1 workaround
        if (this.isWindow && tinyMCE.isNS71) {
            window.resizeBy(0, 10);
            return;
        }
        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);
                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';
        }
    },
    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);
            }
        }
    },
    getWindowArg : function(name, default_value) {
        return tinyMCE.getWindowArg(name, default_value);
    },
    restoreSelection : function() {
        var inst;
        if (this.storeSelection) {
            inst = tinyMCE.selectedInstance;
            inst.getWin().focus();
            if (inst.selectionBookmark)
                inst.selection.moveToBookmark(inst.selectionBookmark);
        }
    },
    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
        });
    },
    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);");
    },
    importClass : function(c) {
        var n;
        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;
    }
    };
// Setup global instance
var tinyMCEPopup = new TinyMCE_Popup();
tinyMCEPopup.init();
// Some global instances
var tinymce = null, tinyMCEPopup, tinyMCE;
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});
            }
        };
        t.isWindow = !t.getWindowArg('mce_inline');
        t.id = t.getWindowArg('mce_window_id');
        t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);
    },
    getWin : function() {
        return window.dialogArguments || opener || parent || top;
    },
    getWindowArg : function(n, dv) {
        var v = this.params[n];
        return tinymce.is(v) ? v : dv;
    },
    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 t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;
        dw = t.getWindowArg('mce_width') - vp.w;
        dh = t.getWindowArg('mce_height') - vp.h;
        if (t.isWindow)
            window.resizeBy(dw, dh);
        else
            t.editor.windowManager.resizeBy(dw, dh, t.id);
    },
    executeOnLoad : function(s) {
        this.onInit.add(function() {
            eval(s);
        });
    },
    storeSelection : function() {
        this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');
    },
    restoreSelection : function() {
        var t = tinyMCEPopup;
        if (!t.isWindow && tinymce.isIE)
            t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);
    },
    requireLangPack : function() {
        var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url');
        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);
            }
        }
    },
    pickColor : function(e, element_id) {
        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) {
        tinyMCEPopup.restoreSelection();
        this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);
    },
    close : function() {
        var t = this;
        // 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
        };
        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,61 +1,61 @@
/**
 * $Id: editable_selects.js 162 2007-01-03 16:16:52Z spocke $
 *
 * Makes select boxes editable.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
var TinyMCE_EditableSelects = {
    editSelectElm : null,
    init : function() {
        var nl = document.getElementsByTagName("select"), i, d = document, o;
        for (i=0; i<nl.length; i++) {
            if (nl[i].className.indexOf('mceEditableSelect') != -1) {
                o = new Option('(value)', '__mce_add_custom__');
                o.className = 'mceAddSelectValue';
                nl[i].options[nl[i].options.length] = o;
                nl[i].setAttribute('onchange', 'TinyMCE_EditableSelects.onChangeEditableSelect(this);');
            }
        }
    },
    onChangeEditableSelect : function(se) {
        var d = document, ne;
        if (se.options[se.selectedIndex].value == '__mce_add_custom__') {
            ne = d.createElement("input");
            ne.id = se.id + "_custom";
            ne.name = se.name + "_custom";
            ne.type = "text";
            ne.style.width = se.clientWidth;
            se.parentNode.insertBefore(ne, se);
            se.style.display = 'none';
            ne.focus();
            ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
            TinyMCE_EditableSelects.editSelectElm = se;
        }
    },
    onBlurEditableSelectInput : function() {
        var se = TinyMCE_EditableSelects.editSelectElm;
        if (se) {
            if (se.previousSibling.value != '') {
                addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
                selectByValue(document.forms[0], se.id, se.previousSibling.value);
            } else
                selectByValue(document.forms[0], se.id, '');
            se.style.display = 'inline';
            se.parentNode.removeChild(se.previousSibling);
            TinyMCE_EditableSelects.editSelectElm = null;
        }
    }
};
/**
 * $Id: editable_selects.js 520 2008-01-07 16:30:32Z spocke $
 *
 * Makes select boxes editable.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
var TinyMCE_EditableSelects = {
    editSelectElm : null,
    init : function() {
        var nl = document.getElementsByTagName("select"), i, d = document, o;
        for (i=0; i<nl.length; i++) {
            if (nl[i].className.indexOf('mceEditableSelect') != -1) {
                o = new Option('(value)', '__mce_add_custom__');
                o.className = 'mceAddSelectValue';
                nl[i].options[nl[i].options.length] = o;
                nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;
            }
        }
    },
    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");
            ne.id = se.id + "_custom";
            ne.name = se.name + "_custom";
            ne.type = "text";
            ne.style.width = se.offsetWidth + 'px';
            se.parentNode.insertBefore(ne, se);
            se.style.display = 'none';
            ne.focus();
            ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;
            TinyMCE_EditableSelects.editSelectElm = se;
        }
    },
    onBlurEditableSelectInput : function() {
        var se = TinyMCE_EditableSelects.editSelectElm;
        if (se) {
            if (se.previousSibling.value != '') {
                addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);
                selectByValue(document.forms[0], se.id, se.previousSibling.value);
            } else
                selectByValue(document.forms[0], se.id, '');
            se.style.display = 'inline';
            se.parentNode.removeChild(se.previousSibling);
            TinyMCE_EditableSelects.editSelectElm = null;
        }
    }
};
program/js/tiny_mce/utils/form_utils.js
@@ -1,210 +1,199 @@
/**
 * $Id: form_utils.js 162 2007-01-03 16:16:52Z spocke $
 *
 * Various form utilitiy functions.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
var themeBaseURL = tinyMCE.baseURL + '/themes/' + tinyMCE.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>';
    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) {
    document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
}
function setBrowserDisabled(id, state) {
    var img = document.getElementById(id);
    var lnk = document.getElementById(id + "_link");
    if (lnk) {
        if (state) {
            lnk.setAttribute("realhref", lnk.getAttribute("href"));
            lnk.removeAttribute("href");
            tinyMCE.switchClass(img, 'mceButtonDisabled', true);
        } else {
            lnk.setAttribute("href", lnk.getAttribute("realhref"));
            tinyMCE.switchClass(img, 'mceButtonNormal', false);
        }
    }
}
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)
        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>';
    return html;
}
function openBrower(img_id, target_form_element, type, option) {
    var img = document.getElementById(img_id);
    if (img.className != "mceButtonDisabled")
        tinyMCEPopup.openBrowser(target_form_element, type, option);
}
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);
        option.selected = true;
        sel.options[sel.options.length] = option;
        sel.selectedIndex = sel.options.length - 1;
    }
    return found;
}
function getSelectValue(form_obj, field_name) {
    var elm = form_obj.elements[field_name];
    if (elm == null || elm.options == null)
        return "";
    return elm.options[elm.selectedIndex].value;
}
function addSelectValue(form_obj, field_name, name, value) {
    var s = form_obj.elements[field_name];
    var o = new Option(name, value);
    s.options[s.options.length] = o;
}
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);
    if (styles) {
        var stylesAr = styles.split(';');
        for (var i=0; i<stylesAr.length; i++) {
            if (stylesAr != "") {
                var key, value;
                key = stylesAr[i].split('=')[0];
                value = stylesAr[i].split('=')[1];
                styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
            }
        }
    } 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]);
    }
}
function isVisible(element_id) {
    var elm = document.getElementById(element_id);
    return elm && elm.style.display != "none";
}
function convertRGBToHex(col) {
    var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
    var rgb = col.replace(re, "$1,$2,$3").split(',');
    if (rgb.length == 3) {
        r = parseInt(rgb[0]).toString(16);
        g = parseInt(rgb[1]).toString(16);
        b = parseInt(rgb[2]).toString(16);
        r = r.length == 1 ? '0' + r : r;
        g = g.length == 1 ? '0' + g : g;
        b = b.length == 1 ? '0' + b : b;
        return "#" + r + g + b;
    }
    return col;
}
function convertHexToRGB(col) {
    if (col.indexOf('#') != -1) {
        col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
        r = parseInt(col.substring(0, 2), 16);
        g = parseInt(col.substring(2, 4), 16);
        b = parseInt(col.substring(4, 6), 16);
        return "rgb(" + r + "," + g + "," + b + ")";
    }
    return col;
}
function trimSize(size) {
    return size.replace(new RegExp('[^0-9%]', 'gi'), '');
}
function getCSSSize(size) {
    size = trimSize(size);
    if (size == "")
        return "";
    return size.indexOf('%') != -1 ? size : size + "px";
}
function getStyle(elm, attrib, style) {
    var val = tinyMCE.getAttrib(elm, attrib);
    if (val != '')
        return '' + val;
    if (typeof(style) == 'undefined')
        style = attrib;
    val = eval('elm.style.' + style);
    return val == null ? '' : '' + val;
}
/**
 * $Id: form_utils.js 673 2008-03-06 13:26:20Z spocke $
 *
 * Various form utilitiy functions.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
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:;" 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 updateColor(img_id, form_element_id) {
    document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;
}
function setBrowserDisabled(id, state) {
    var img = document.getElementById(id);
    var lnk = document.getElementById(id + "_link");
    if (lnk) {
        if (state) {
            lnk.setAttribute("realhref", lnk.getAttribute("href"));
            lnk.removeAttribute("href");
            tinyMCEPopup.dom.addClass(img, 'disabled');
        } else {
            if (lnk.getAttribute("realhref"))
                lnk.setAttribute("href", lnk.getAttribute("realhref"));
            tinyMCEPopup.dom.removeClass(img, 'disabled');
        }
    }
}
function getBrowserHTML(id, target_form_element, type, prefix) {
    var option = prefix + "_" + type + "_browser_callback", cb, html;
    cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));
    if (!cb)
        return "";
    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 openBrowser(img_id, target_form_element, type, option) {
    var img = document.getElementById(img_id);
    if (img.className != "mceButtonDisabled")
        tinyMCEPopup.openBrowser(target_form_element, type, option);
}
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);
        option.selected = true;
        sel.options[sel.options.length] = option;
        sel.selectedIndex = sel.options.length - 1;
    }
    return found;
}
function getSelectValue(form_obj, field_name) {
    var elm = form_obj.elements[field_name];
    if (elm == null || elm.options == null)
        return "";
    return elm.options[elm.selectedIndex].value;
}
function addSelectValue(form_obj, field_name, name, value) {
    var s = form_obj.elements[field_name];
    var o = new Option(name, value);
    s.options[s.options.length] = o;
}
function addClassesToList(list_id, specific_option) {
    // Setup class droplist
    var styleSelectElm = document.getElementById(list_id);
    var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);
    styles = tinyMCEPopup.getParam(specific_option, styles);
    if (styles) {
        var stylesAr = styles.split(';');
        for (var i=0; i<stylesAr.length; i++) {
            if (stylesAr != "") {
                var key, value;
                key = stylesAr[i].split('=')[0];
                value = stylesAr[i].split('=')[1];
                styleSelectElm.options[styleSelectElm.length] = new Option(key, value);
            }
        }
    } else {
        tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {
            styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);
        });
    }
}
function isVisible(element_id) {
    var elm = document.getElementById(element_id);
    return elm && elm.style.display != "none";
}
function convertRGBToHex(col) {
    var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
    var rgb = col.replace(re, "$1,$2,$3").split(',');
    if (rgb.length == 3) {
        r = parseInt(rgb[0]).toString(16);
        g = parseInt(rgb[1]).toString(16);
        b = parseInt(rgb[2]).toString(16);
        r = r.length == 1 ? '0' + r : r;
        g = g.length == 1 ? '0' + g : g;
        b = b.length == 1 ? '0' + b : b;
        return "#" + r + g + b;
    }
    return col;
}
function convertHexToRGB(col) {
    if (col.indexOf('#') != -1) {
        col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');
        r = parseInt(col.substring(0, 2), 16);
        g = parseInt(col.substring(2, 4), 16);
        b = parseInt(col.substring(4, 6), 16);
        return "rgb(" + r + "," + g + "," + b + ")";
    }
    return col;
}
function trimSize(size) {
    return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');
}
function getCSSSize(size) {
    size = trimSize(size);
    if (size == "")
        return "";
    // Add px
    if (/^[0-9]+$/.test(size))
        size += 'px';
    return size;
}
function getStyle(elm, attrib, style) {
    var val = tinyMCEPopup.dom.getAttrib(elm, attrib);
    if (val != '')
        return '' + val;
    if (typeof(style) == 'undefined')
        style = attrib;
    return tinyMCEPopup.dom.getStyle(elm, style);
}
program/js/tiny_mce/utils/mclayer.js
File was deleted
program/js/tiny_mce/utils/mctabs.js
@@ -1,74 +1,76 @@
/**
 * $Id: mctabs.js 162 2007-01-03 16:16:52Z spocke $
 *
 * Moxiecode DHTML Tabs script.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
function MCTabs() {
    this.settings = new Array();
};
MCTabs.prototype.init = function(settings) {
    this.settings = settings;
};
MCTabs.prototype.getParam = function(name, default_value) {
    var value = null;
    value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
    // Fix bool values
    if (value == "true" || value == "false")
        return (value == "true");
    return value;
};
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');
    if (tabElm && tabContainerElm) {
        var nodes = tabContainerElm.childNodes;
        // Hide all other tabs
        for (var i=0; i<nodes.length; i++) {
            if (nodes[i].nodeName == "LI")
                nodes[i].className = '';
        }
        // Show selected tab
        tabElm.className = 'current';
    }
    if (panelElm && panelContainerElm) {
        var nodes = panelContainerElm.childNodes;
        // Hide all other panels
        for (var i=0; i<nodes.length; i++) {
            if (nodes[i].nodeName == "DIV")
                nodes[i].className = 'panel';
        }
        // Show selected panel
        panelElm.className = 'current';
    }
};
MCTabs.prototype.getAnchor = function() {
    var pos, url = document.location.href;
    if ((pos = url.lastIndexOf('#')) != -1)
        return url.substring(pos + 1);
    return "";
};
// Global instance
var mcTabs = new MCTabs();
/**
 * $Id: mctabs.js 758 2008-03-30 13:53:29Z spocke $
 *
 * Moxiecode DHTML Tabs script.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
function MCTabs() {
    this.settings = [];
};
MCTabs.prototype.init = function(settings) {
    this.settings = settings;
};
MCTabs.prototype.getParam = function(name, default_value) {
    var value = null;
    value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
    // Fix bool values
    if (value == "true" || value == "false")
        return (value == "true");
    return value;
};
MCTabs.prototype.displayTab = function(tab_id, panel_id) {
    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) {
        nodes = tabContainerElm.childNodes;
        // Hide all other tabs
        for (i = 0; i < nodes.length; i++) {
            if (nodes[i].nodeName == "LI")
                nodes[i].className = '';
        }
        // Show selected tab
        tabElm.className = 'current';
    }
    if (panelElm && panelContainerElm) {
        nodes = panelContainerElm.childNodes;
        // Hide all other panels
        for (i = 0; i < nodes.length; i++) {
            if (nodes[i].nodeName == "DIV")
                nodes[i].className = 'panel';
        }
        // Show selected panel
        panelElm.className = 'current';
    }
};
MCTabs.prototype.getAnchor = function() {
    var pos, url = document.location.href;
    if ((pos = url.lastIndexOf('#')) != -1)
        return url.substring(pos + 1);
    return "";
};
// Global instance
var mcTabs = new MCTabs();
program/js/tiny_mce/utils/validate.js
@@ -1,219 +1,219 @@
/**
 * $Id: validate.js 162 2007-01-03 16:16:52Z spocke $
 *
 * Various form validation methods.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2007, Moxiecode Systems AB, All rights reserved.
 */
/**
    // String validation:
    if (!Validator.isEmail('myemail'))
        alert('Invalid email.');
    // Form validation:
    var f = document.forms['myform'];
    if (!Validator.isEmail(f.myemail))
        alert('Invalid email.');
*/
var Validator = {
    isEmail : function(s) {
        return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
    },
    isAbsUrl : function(s) {
        return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
    },
    isSize : function(s) {
        return this.test(s, '^[0-9]+(px|%)?$');
    },
    isId : function(s) {
        return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
    },
    isEmpty : function(s) {
        var nl, i;
        if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
            return true;
        if (s.type == 'checkbox' && !s.checked)
            return true;
        if (s.type == 'radio') {
            for (i=0, nl = s.form.elements; i<nl.length; i++) {
                if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
                    return false;
            }
            return true;
        }
        return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
    },
    isNumber : function(s, d) {
        return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
    },
    test : function(s, p) {
        s = s.nodeType == 1 ? s.value : s;
        return s == '' || new RegExp(p).test(s);
    }
};
var AutoValidator = {
    settings : {
        id_cls : 'id',
        int_cls : 'int',
        url_cls : 'url',
        number_cls : 'number',
        email_cls : 'email',
        size_cls : 'size',
        required_cls : 'required',
        invalid_cls : 'invalid',
        min_cls : 'min',
        max_cls : 'max'
    },
    init : function(s) {
        var n;
        for (n in s)
            this.settings[n] = s[n];
    },
    validate : function(f) {
        var i, nl, s = this.settings, c = 0;
        nl = this.tags(f, 'label');
        for (i=0; i<nl.length; i++)
            this.removeClass(nl[i], s.invalid_cls);
        c += this.validateElms(f, 'input');
        c += this.validateElms(f, 'select');
        c += this.validateElms(f, 'textarea');
        return c == 3;
    },
    invalidate : function(n) {
        this.mark(n.form, n);
    },
    reset : function(e) {
        var t = new Array('label', 'input', 'select', 'textarea');
        var i, j, nl, s = this.settings;
        if (e == null)
            return;
        for (i=0; i<t.length; i++) {
            nl = this.tags(e.form ? e.form : e, t[i]);
            for (j=0; j<nl.length; j++)
                this.removeClass(nl[j], s.invalid_cls);
        }
    },
    validateElms : function(f, e) {
        var nl, i, n, s = this.settings, st = true, va = Validator, v;
        nl = this.tags(f, e);
        for (i=0; i<nl.length; i++) {
            n = nl[i];
            this.removeClass(n, s.invalid_cls);
            if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
                st = this.mark(f, n);
            if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.size_cls) && !va.isSize(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.id_cls) && !va.isId(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.min_cls, true)) {
                v = this.getNum(n, s.min_cls);
                if (isNaN(v) || parseInt(n.value) < parseInt(v))
                    st = this.mark(f, n);
            }
            if (this.hasClass(n, s.max_cls, true)) {
                v = this.getNum(n, s.max_cls);
                if (isNaN(v) || parseInt(n.value) > parseInt(v))
                    st = this.mark(f, n);
            }
        }
        return st;
    },
    hasClass : function(n, c, d) {
        return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
    },
    getNum : function(n, c) {
        c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
        c = c.replace(/[^0-9]/g, '');
        return c;
    },
    addClass : function(n, c, b) {
        var o = this.removeClass(n, c);
        n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
    },
    removeClass : function(n, c) {
        c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
        return n.className = c != ' ' ? c : '';
    },
    tags : function(f, s) {
        return f.getElementsByTagName(s);
    },
    mark : function(f, n) {
        var s = this.settings;
        this.addClass(n, s.invalid_cls);
        this.markLabels(f, n, s.invalid_cls);
        return false;
    },
    markLabels : function(f, n, ic) {
        var nl, i;
        nl = this.tags(f, "label");
        for (i=0; i<nl.length; i++) {
            if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
                this.addClass(nl[i], ic);
        }
        return null;
    }
};
/**
 * $Id: validate.js 758 2008-03-30 13:53:29Z spocke $
 *
 * Various form validation methods.
 *
 * @author Moxiecode
 * @copyright Copyright Â© 2004-2008, Moxiecode Systems AB, All rights reserved.
 */
/**
    // String validation:
    if (!Validator.isEmail('myemail'))
        alert('Invalid email.');
    // Form validation:
    var f = document.forms['myform'];
    if (!Validator.isEmail(f.myemail))
        alert('Invalid email.');
*/
var Validator = {
    isEmail : function(s) {
        return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');
    },
    isAbsUrl : function(s) {
        return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');
    },
    isSize : function(s) {
        return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');
    },
    isId : function(s) {
        return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');
    },
    isEmpty : function(s) {
        var nl, i;
        if (s.nodeName == 'SELECT' && s.selectedIndex < 1)
            return true;
        if (s.type == 'checkbox' && !s.checked)
            return true;
        if (s.type == 'radio') {
            for (i=0, nl = s.form.elements; i<nl.length; i++) {
                if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)
                    return false;
            }
            return true;
        }
        return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);
    },
    isNumber : function(s, d) {
        return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));
    },
    test : function(s, p) {
        s = s.nodeType == 1 ? s.value : s;
        return s == '' || new RegExp(p).test(s);
    }
};
var AutoValidator = {
    settings : {
        id_cls : 'id',
        int_cls : 'int',
        url_cls : 'url',
        number_cls : 'number',
        email_cls : 'email',
        size_cls : 'size',
        required_cls : 'required',
        invalid_cls : 'invalid',
        min_cls : 'min',
        max_cls : 'max'
    },
    init : function(s) {
        var n;
        for (n in s)
            this.settings[n] = s[n];
    },
    validate : function(f) {
        var i, nl, s = this.settings, c = 0;
        nl = this.tags(f, 'label');
        for (i=0; i<nl.length; i++)
            this.removeClass(nl[i], s.invalid_cls);
        c += this.validateElms(f, 'input');
        c += this.validateElms(f, 'select');
        c += this.validateElms(f, 'textarea');
        return c == 3;
    },
    invalidate : function(n) {
        this.mark(n.form, n);
    },
    reset : function(e) {
        var t = ['label', 'input', 'select', 'textarea'];
        var i, j, nl, s = this.settings;
        if (e == null)
            return;
        for (i=0; i<t.length; i++) {
            nl = this.tags(e.form ? e.form : e, t[i]);
            for (j=0; j<nl.length; j++)
                this.removeClass(nl[j], s.invalid_cls);
        }
    },
    validateElms : function(f, e) {
        var nl, i, n, s = this.settings, st = true, va = Validator, v;
        nl = this.tags(f, e);
        for (i=0; i<nl.length; i++) {
            n = nl[i];
            this.removeClass(n, s.invalid_cls);
            if (this.hasClass(n, s.required_cls) && va.isEmpty(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.number_cls) && !va.isNumber(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))
                st = this.mark(f, n);
            if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.email_cls) && !va.isEmail(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.size_cls) && !va.isSize(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.id_cls) && !va.isId(n))
                st = this.mark(f, n);
            if (this.hasClass(n, s.min_cls, true)) {
                v = this.getNum(n, s.min_cls);
                if (isNaN(v) || parseInt(n.value) < parseInt(v))
                    st = this.mark(f, n);
            }
            if (this.hasClass(n, s.max_cls, true)) {
                v = this.getNum(n, s.max_cls);
                if (isNaN(v) || parseInt(n.value) > parseInt(v))
                    st = this.mark(f, n);
            }
        }
        return st;
    },
    hasClass : function(n, c, d) {
        return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);
    },
    getNum : function(n, c) {
        c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];
        c = c.replace(/[^0-9]/g, '');
        return c;
    },
    addClass : function(n, c, b) {
        var o = this.removeClass(n, c);
        n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
    },
    removeClass : function(n, c) {
        c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');
        return n.className = c != ' ' ? c : '';
    },
    tags : function(f, s) {
        return f.getElementsByTagName(s);
    },
    mark : function(f, n) {
        var s = this.settings;
        this.addClass(n, s.invalid_cls);
        this.markLabels(f, n, s.invalid_cls);
        return false;
    },
    markLabels : function(f, n, ic) {
        var nl, i;
        nl = this.tags(f, "label");
        for (i=0; i<nl.length; i++) {
            if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)
                this.addClass(nl[i], ic);
        }
        return 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));
  }
@@ -923,4 +922,4 @@
     $OUTPUT->set_env('contacts', $a_contacts); 
  } 
$OUTPUT->send('compose');
?>
?>
Diff truncated after the above file
program/steps/settings/edit_identity.inc