summaryrefslogtreecommitdiff
path: root/public/javascripts
diff options
context:
space:
mode:
Diffstat (limited to 'public/javascripts')
-rw-r--r--public/javascripts/admin_interface.js19
-rw-r--r--public/javascripts/tiny_mce/jquery.tinymce.js1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/langs/en.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/license.txt0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advhr/css/advhr.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advhr/js/rule.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advhr/rule.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/css/advimage.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/image.htm11
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/img/sample.gifbin1624 -> 1624 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/js/image.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advlink/css/advlink.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advlink/js/advlink.js3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/advlink/link.htm41
-rw-r--r--public/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js1
-rw-r--r--public/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js114
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js0
-rwxr-xr-xpublic/javascripts/tiny_mce/plugins/compat2x/editor_plugin.js1
-rwxr-xr-xpublic/javascripts/tiny_mce/plugins/compat2x/editor_plugin_src.js616
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/emotions.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gifbin354 -> 354 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gifbin329 -> 329 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gifbin331 -> 331 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gifbin344 -> 344 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gifbin340 -> 340 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gifbin336 -> 336 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gifbin338 -> 338 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gifbin344 -> 344 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gifbin321 -> 321 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gifbin325 -> 325 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gifbin345 -> 345 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gifbin342 -> 342 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gifbin328 -> 328 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gifbin337 -> 337 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gifbin351 -> 351 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gifbin336 -> 336 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/js/emotions.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/dialog.htm0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/img/example.gifbin87 -> 87 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/js/dialog.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/langs/en.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js8
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm19
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js8
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gifbin818 -> 818 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gifbin280 -> 280 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gifbin1195 -> 1195 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gifbin915 -> 915 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gifbin911 -> 911 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gifbin769 -> 769 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gifbin92 -> 92 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/inlinepopups/template.htm0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/layer/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/css/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/css/media.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js29
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/flash.gifbin241 -> 241 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/flv_player.swfbin11668 -> 11668 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/quicktime.gifbin303 -> 303 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/realmedia.gifbin439 -> 439 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/shockwave.gifbin387 -> 387 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/trans.gifbin43 -> 43 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gifbin415 -> 415 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/js/embed.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/js/media.js6
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/media/media.htm6
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/pagebreak/css/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gifbin325 -> 325 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gifbin43 -> 43 bytes
-rwxr-xr-xpublic/javascripts/tiny_mce/plugins/paste/blank.htm22
-rwxr-xr-xpublic/javascripts/tiny_mce/plugins/paste/css/blank.css14
-rwxr-xr-xpublic/javascripts/tiny_mce/plugins/paste/css/pasteword.css3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js706
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/js/pastetext.js58
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/js/pasteword.js79
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/pastetext.htm35
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/paste/pasteword.htm8
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/preview/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js4
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/preview/example.html0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/preview/preview.html16
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/print/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/safari/blank.htm0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/safari/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js112
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/save/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/spellchecker/css/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gifbin46 -> 46 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/style/css/props.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/style/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/style/js/props.js14
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/style/props.htm1
-rw-r--r--public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js1
-rw-r--r--public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js109
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/cell.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/css/cell.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/css/row.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/css/table.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js26
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/js/cell.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/js/merge_cells.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/js/row.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/js/table.js39
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/merge_cells.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/row.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/table/table.htm7
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/blank.htm0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/css/template.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/js/template.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/template/template.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js0
-rw-r--r--public/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js1
-rw-r--r--public/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js95
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm5
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/about.htm2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/anchor.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/charmap.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/color_picker.htm3
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/editor_template.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/editor_template_src.js16
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/image.htm15
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpgbin3189 -> 3189 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/img/icons.gifbin11505 -> 11505 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/about.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/anchor.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/charmap.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/color_picker.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/image.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/link.js11
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/js/source_editor.js4
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/langs/en.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/link.htm5
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.pngbin3274 -> 3274 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gifbin70 -> 70 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gifbin68 -> 68 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gifbin70 -> 70 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gifbin1787 -> 1787 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gifbin1326 -> 1326 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.pngbin5859 -> 5859 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.pngbin3736 -> 3736 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.pngbin5358 -> 5358 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/advanced/source_editor.htm1
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/editor_template.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/editor_template_src.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/img/icons.gifbin1440 -> 1440 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/langs/en.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/skins/default/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/skins/default/ui.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.pngbin5102 -> 5102 bytes
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/tiny_mce.js2
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/tiny_mce_popup.js299
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/tiny_mce_src.js23430
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/utils/editable_selects.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/utils/form_utils.js8
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/utils/mctabs.js0
-rw-r--r--[-rwxr-xr-x]public/javascripts/tiny_mce/utils/validate.js0
249 files changed, 13419 insertions, 12722 deletions
diff --git a/public/javascripts/admin_interface.js b/public/javascripts/admin_interface.js
index 47a4bac..95256ee 100644
--- a/public/javascripts/admin_interface.js
+++ b/public/javascripts/admin_interface.js
@@ -5,6 +5,25 @@ $(document).ready(function () {
5 menu_item_sorter.initialize(); 5 menu_item_sorter.initialize();
6 parent_search.initialize_search(); 6 parent_search.initialize_search();
7 7
8 $(".with_editor").tinymce({
9 script_url : '/javascripts/tiny_mce/tiny_mce.js',
10 theme: "advanced",
11 mode : "specific_textareas",
12 editor_selector : "with_editor",
13 theme_advanced_toolbar_location : "top",
14 theme_advanced_toolbar_align : "left",
15 theme_advanced_buttons1 : "bold, italic, underline, bullist, numlist, link, unlink, formatselect, code",
16 theme_advanced_buttons2 : "",
17 theme_advanced_buttons3 : "",
18 extended_valid_elements : "aggregate[tags|limit|order_by|order_direction|partial]",
19 relative_urls : false,
20 entity_encoding : "raw",
21 oninit : "cccms.setup_autosave"
22 });
23
24
25
26
8 jQuery.ajaxSetup({ 27 jQuery.ajaxSetup({
9 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript");} 28 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript");}
10 }); 29 });
diff --git a/public/javascripts/tiny_mce/jquery.tinymce.js b/public/javascripts/tiny_mce/jquery.tinymce.js
new file mode 100644
index 0000000..bb01508
--- /dev/null
+++ b/public/javascripts/tiny_mce/jquery.tinymce.js
@@ -0,0 +1 @@
(function(b){var c,a=[];function e(g,f,i){var h;h=b.fn[f];b.fn[f]=function(){var j;if(g!=="after"){j=i.apply(this,arguments);if(j!==undefined){return j}}j=h.apply(this,arguments);if(g!=="before"){i.apply(this,arguments)}return j}}b.fn.tinymce=function(i){var h=this,g,j="",f;if(!h.length){return}if(!i){return tinyMCE.get(this[0].id)}function k(){if(d){d();d=null}h.each(function(m,p){var l,o=p.id||tinymce.DOM.uniqueId();p.id=o;l=new tinymce.Editor(o,i);l.render()})}if(!window.tinymce&&!c&&(g=i.script_url)){c=1;if(/_(src|dev)\.js/g.test(g)){j="_src"}window.tinyMCEPreInit={base:g.substring(0,g.lastIndexOf("/")),suffix:j,query:""};b.getScript(g,function(){tinymce.dom.Event.domLoaded=1;c=2;k();b.each(a,function(l,m){m()})})}else{if(c===1){a.push(k)}else{k()}}};b.extend(b.expr[":"],{tinymce:function(f){return f.id&&!!tinyMCE.get(f.id)}});function d(){function f(){this.find("span.mceEditor,div.mceEditor").each(function(j,k){var h;if(h=tinyMCE.get(k.id.replace(/_parent$/,""))){h.remove()}})}function g(i){var h;if(i!==undefined){f.call(this);this.each(function(k,l){var j;if(j=tinyMCE.get(l.id)){j.setContent(i)}})}else{if(this.length>0){if(h=tinyMCE.get(this[0].id)){return h.getContent()}}}}e("both","text",function(h){if(h!==undefined){return g.call(this,h)}if(this.length>0){if(ed=tinyMCE.get(this[0].id)){return ed.getContent().replace(/<[^>]+>/g,"")}}});b.each(["val","html"],function(j,h){e("both",h,g)});b.each(["append","prepend"],function(j,h){e("before",h,function(i){if(i!==undefined){this.each(function(l,m){var k;if(k=tinyMCE.get(m.id)){if(h==="append"){k.setContent(k.getContent()+i)}else{k.setContent(i+k.getContent())}}})}})});e("both","attr",function(h,i){if(h&&h==="value"){return g.call(this,i)}});b.each(["remove","replaceWith","replaceAll","empty"],function(j,h){e("before",h,f)})}})(jQuery); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/langs/en.js b/public/javascripts/tiny_mce/langs/en.js
index 8519b4d..8519b4d 100755..100644
--- a/public/javascripts/tiny_mce/langs/en.js
+++ b/public/javascripts/tiny_mce/langs/en.js
diff --git a/public/javascripts/tiny_mce/license.txt b/public/javascripts/tiny_mce/license.txt
index 60d6d4c..60d6d4c 100755..100644
--- a/public/javascripts/tiny_mce/license.txt
+++ b/public/javascripts/tiny_mce/license.txt
diff --git a/public/javascripts/tiny_mce/plugins/advhr/css/advhr.css b/public/javascripts/tiny_mce/plugins/advhr/css/advhr.css
index 0e22834..0e22834 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advhr/css/advhr.css
+++ b/public/javascripts/tiny_mce/plugins/advhr/css/advhr.css
diff --git a/public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js b/public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js
index f335004..4d3b062 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/advhr/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.AdvancedHRPlugin',{init:function(ed,url){ed.addCommand('mceAdvancedHr',function(){ed.windowManager.open({file:url+'/rule.htm',width:250+parseInt(ed.getLang('advhr.delta_width',0)),height:160+parseInt(ed.getLang('advhr.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('advhr',{title:'advhr.advhr_desc',cmd:'mceAdvancedHr'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('advhr',n.nodeName=='HR');});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName==='HR')ed.selection.select(e);});},getInfo:function(){return{longname:'Advanced HR',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('advhr',tinymce.plugins.AdvancedHRPlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js
index 8a84753..8a84753 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/advhr/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/advhr/js/rule.js b/public/javascripts/tiny_mce/plugins/advhr/js/rule.js
index b6cbd66..b6cbd66 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advhr/js/rule.js
+++ b/public/javascripts/tiny_mce/plugins/advhr/js/rule.js
diff --git a/public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js
index 873bfd8..873bfd8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/advhr/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/advhr/rule.htm b/public/javascripts/tiny_mce/plugins/advhr/rule.htm
index 8f20f7f..75ca339 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advhr/rule.htm
+++ b/public/javascripts/tiny_mce/plugins/advhr/rule.htm
@@ -7,7 +7,6 @@
7 <script type="text/javascript" src="../../utils/mctabs.js"></script> 7 <script type="text/javascript" src="../../utils/mctabs.js"></script>
8 <script type="text/javascript" src="../../utils/form_utils.js"></script> 8 <script type="text/javascript" src="../../utils/form_utils.js"></script>
9 <link href="css/advhr.css" rel="stylesheet" type="text/css" /> 9 <link href="css/advhr.css" rel="stylesheet" type="text/css" />
10 <base target="_self" />
11</head> 10</head>
12<body> 11<body>
13<form onsubmit="AdvHRDialog.update();return false;" action="#"> 12<form onsubmit="AdvHRDialog.update();return false;" action="#">
@@ -22,7 +21,7 @@
22 <table border="0" cellpadding="4" cellspacing="0"> 21 <table border="0" cellpadding="4" cellspacing="0">
23 <tr> 22 <tr>
24 <td><label for="width">{#advhr_dlg.width}</label></td> 23 <td><label for="width">{#advhr_dlg.width}</label></td>
25 <td nowrap="nowrap"> 24 <td class="nowrap">
26 <input id="width" name="width" type="text" value="" class="mceFocus" /> 25 <input id="width" name="width" type="text" value="" class="mceFocus" />
27 <select name="width2" id="width2"> 26 <select name="width2" id="width2">
28 <option value="">px</option> 27 <option value="">px</option>
diff --git a/public/javascripts/tiny_mce/plugins/advimage/css/advimage.css b/public/javascripts/tiny_mce/plugins/advimage/css/advimage.css
index 0a6251a..0a6251a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/css/advimage.css
+++ b/public/javascripts/tiny_mce/plugins/advimage/css/advimage.css
diff --git a/public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js b/public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js
index 3af5057..4c7a9c3 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/advimage/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.AdvancedImagePlugin',{init:function(ed,url){ed.addCommand('mceAdvImage',function(){if(ed.dom.getAttrib(ed.selection.getNode(),'class').indexOf('mceItem')!=-1)return;ed.windowManager.open({file:url+'/image.htm',width:480+parseInt(ed.getLang('advimage.delta_width',0)),height:385+parseInt(ed.getLang('advimage.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('image',{title:'advimage.image_desc',cmd:'mceAdvImage'});},getInfo:function(){return{longname:'Advanced image',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('advimage',tinymce.plugins.AdvancedImagePlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js
index f526842..f526842 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/advimage/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/advimage/image.htm b/public/javascripts/tiny_mce/plugins/advimage/image.htm
index dd84083..5d26150 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/image.htm
+++ b/public/javascripts/tiny_mce/plugins/advimage/image.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="../../utils/editable_selects.js"></script> 9 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
10 <script type="text/javascript" src="js/image.js"></script> 10 <script type="text/javascript" src="js/image.js"></script>
11 <link href="css/advimage.css" rel="stylesheet" type="text/css" /> 11 <link href="css/advimage.css" rel="stylesheet" type="text/css" />
12 <base target="_self" />
13</head> 12</head>
14<body id="advimage" style="display: none"> 13<body id="advimage" style="display: none">
15 <form onsubmit="ImageDialog.insert();return false;" action="#"> 14 <form onsubmit="ImageDialog.insert();return false;" action="#">
@@ -38,7 +37,7 @@
38 </tr> 37 </tr>
39 <tr> 38 <tr>
40 <td><label for="src_list">{#advimage_dlg.image_list}</label></td> 39 <td><label for="src_list">{#advimage_dlg.image_list}</label></td>
41 <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"></select></td> 40 <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>
42 </tr> 41 </tr>
43 <tr> 42 <tr>
44 <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> 43 <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td>
@@ -89,7 +88,7 @@
89 88
90 <tr> 89 <tr>
91 <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td> 90 <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>
92 <td nowrap="nowrap"> 91 <td class="nowrap">
93 <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" /> x 92 <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" /> x
94 <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" /> px 93 <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" /> px
95 </td> 94 </td>
@@ -123,7 +122,7 @@
123 122
124 <tr> 123 <tr>
125 <td><label for="class_list">{#class_name}</label></td> 124 <td><label for="class_list">{#class_name}</label></td>
126 <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"></select></td> 125 <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>
127 </tr> 126 </tr>
128 127
129 <tr> 128 <tr>
@@ -158,7 +157,7 @@
158 </tr> 157 </tr>
159 <tr> 158 <tr>
160 <td><label for="over_list">{#advimage_dlg.image_list}</label></td> 159 <td><label for="over_list">{#advimage_dlg.image_list}</label></td>
161 <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"></select></td> 160 <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
162 </tr> 161 </tr>
163 <tr> 162 <tr>
164 <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> 163 <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td>
@@ -171,7 +170,7 @@
171 </tr> 170 </tr>
172 <tr> 171 <tr>
173 <td><label for="out_list">{#advimage_dlg.image_list}</label></td> 172 <td><label for="out_list">{#advimage_dlg.image_list}</label></td>
174 <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"></select></td> 173 <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>
175 </tr> 174 </tr>
176 </table> 175 </table>
177 </fieldset> 176 </fieldset>
diff --git a/public/javascripts/tiny_mce/plugins/advimage/img/sample.gif b/public/javascripts/tiny_mce/plugins/advimage/img/sample.gif
index 53bf689..53bf689 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/img/sample.gif
+++ b/public/javascripts/tiny_mce/plugins/advimage/img/sample.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/advimage/js/image.js b/public/javascripts/tiny_mce/plugins/advimage/js/image.js
index 64fc6f6..3477226 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/js/image.js
+++ b/public/javascripts/tiny_mce/plugins/advimage/js/image.js
@@ -272,6 +272,7 @@ var ImageDialog = {
272 cl = tinyMCEPopup.editor.dom.getClasses(); 272 cl = tinyMCEPopup.editor.dom.getClasses();
273 273
274 if (cl.length > 0) { 274 if (cl.length > 0) {
275 lst.options.length = 0;
275 lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), ''); 276 lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');
276 277
277 tinymce.each(cl, function(o) { 278 tinymce.each(cl, function(o) {
@@ -285,6 +286,7 @@ var ImageDialog = {
285 var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl; 286 var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;
286 287
287 l = window[l]; 288 l = window[l];
289 lst.options.length = 0;
288 290
289 if (l && l.length > 0) { 291 if (l && l.length > 0) {
290 lst.options[lst.options.length] = new Option('', ''); 292 lst.options[lst.options.length] = new Option('', '');
diff --git a/public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js
index f493d19..f493d19 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/advimage/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/advlink/css/advlink.css b/public/javascripts/tiny_mce/plugins/advlink/css/advlink.css
index 1436431..1436431 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advlink/css/advlink.css
+++ b/public/javascripts/tiny_mce/plugins/advlink/css/advlink.css
diff --git a/public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js b/public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js
index 4899f7b..983fe5a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/advlink/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.AdvancedLinkPlugin',{init:function(ed,url){this.editor=ed;ed.addCommand('mceAdvLink',function(){var se=ed.selection;if(se.isCollapsed()&&!ed.dom.getParent(se.getNode(),'A'))return;ed.windowManager.open({file:url+'/link.htm',width:480+parseInt(ed.getLang('advlink.delta_width',0)),height:400+parseInt(ed.getLang('advlink.delta_height',0)),inline:1},{plugin_url:url});});ed.addButton('link',{title:'advlink.link_desc',cmd:'mceAdvLink'});ed.addShortcut('ctrl+k','advlink.advlink_desc','mceAdvLink');ed.onNodeChange.add(function(ed,cm,n,co){cm.setDisabled('link',co&&n.nodeName!='A');cm.setActive('link',n.nodeName=='A'&&!n.name);});},getInfo:function(){return{longname:'Advanced link',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('advlink',tinymce.plugins.AdvancedLinkPlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js
index fc5325a..fc5325a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/advlink/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/advlink/js/advlink.js b/public/javascripts/tiny_mce/plugins/advlink/js/advlink.js
index a896250..bb7922a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advlink/js/advlink.js
+++ b/public/javascripts/tiny_mce/plugins/advlink/js/advlink.js
@@ -116,7 +116,7 @@ function checkPrefix(n) {
116 if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email'))) 116 if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))
117 n.value = 'mailto:' + n.value; 117 n.value = 'mailto:' + n.value;
118 118
119 if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external'))) 119 if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))
120 n.value = 'http://' + n.value; 120 n.value = 'http://' + n.value;
121} 121}
122 122
@@ -402,6 +402,7 @@ function insertAction() {
402 402
403 // Create new anchor elements 403 // Create new anchor elements
404 if (elm == null) { 404 if (elm == null) {
405 inst.getDoc().execCommand("unlink", false, null);
405 tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); 406 tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
406 407
407 elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';}); 408 elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});
diff --git a/public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js
index c71ffbd..c71ffbd 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/advlink/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/advlink/link.htm b/public/javascripts/tiny_mce/plugins/advlink/link.htm
index f46e8f8..cc8b0b8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/advlink/link.htm
+++ b/public/javascripts/tiny_mce/plugins/advlink/link.htm
@@ -8,7 +8,6 @@
8 <script type="text/javascript" src="../../utils/validate.js"></script> 8 <script type="text/javascript" src="../../utils/validate.js"></script>
9 <script type="text/javascript" src="js/advlink.js"></script> 9 <script type="text/javascript" src="js/advlink.js"></script>
10 <link href="css/advlink.css" rel="stylesheet" type="text/css" /> 10 <link href="css/advlink.css" rel="stylesheet" type="text/css" />
11 <base target="_self" />
12</head> 11</head>
13<body id="advlink" style="display: none"> 12<body id="advlink" style="display: none">
14 <form onsubmit="insertAction();return false;" action="#"> 13 <form onsubmit="insertAction();return false;" action="#">
@@ -28,7 +27,7 @@
28 27
29 <table border="0" cellpadding="4" cellspacing="0"> 28 <table border="0" cellpadding="4" cellspacing="0">
30 <tr> 29 <tr>
31 <td nowrap="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td> 30 <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>
32 <td><table border="0" cellspacing="0" cellpadding="0"> 31 <td><table border="0" cellspacing="0" cellpadding="0">
33 <tr> 32 <tr>
34 <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" /></td> 33 <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" /></td>
@@ -38,25 +37,25 @@
38 </tr> 37 </tr>
39 <tr id="linklisthrefrow"> 38 <tr id="linklisthrefrow">
40 <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td> 39 <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>
41 <td colspan="2" id="linklisthrefcontainer">&nbsp;</td> 40 <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>
42 </tr> 41 </tr>
43 <tr> 42 <tr>
44 <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td> 43 <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>
45 <td colspan="2" id="anchorlistcontainer">&nbsp;</td> 44 <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>
46 </tr> 45 </tr>
47 <tr> 46 <tr>
48 <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td> 47 <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>
49 <td id="targetlistcontainer">&nbsp;</td> 48 <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>
50 </tr> 49 </tr>
51 <tr> 50 <tr>
52 <td nowrap="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td> 51 <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>
53 <td><input id="title" name="title" type="text" value="" /></td> 52 <td><input id="title" name="title" type="text" value="" /></td>
54 </tr> 53 </tr>
55 <tr> 54 <tr>
56 <td><label id="classlabel" for="classlist">{#class_name}</label></td> 55 <td><label id="classlabel" for="classlist">{#class_name}</label></td>
57 <td> 56 <td>
58 <select id="classlist" name="classlist" onchange="changeClass();"> 57 <select id="classlist" name="classlist" onchange="changeClass();">
59 <option value="" selected>{#not_set}</option> 58 <option value="" selected="selected">{#not_set}</option>
60 </select> 59 </select>
61 </td> 60 </td>
62 </tr> 61 </tr>
@@ -73,7 +72,7 @@
73 72
74 <table border="0" cellpadding="0" cellspacing="4"> 73 <table border="0" cellpadding="0" cellspacing="4">
75 <tr> 74 <tr>
76 <td nowrap="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td> 75 <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>
77 <td> 76 <td>
78 <table border="0" cellspacing="0" cellpadding="0"> 77 <table border="0" cellspacing="0" cellpadding="0">
79 <tr> 78 <tr>
@@ -84,19 +83,19 @@
84 </td> 83 </td>
85 </tr> 84 </tr>
86 <tr> 85 <tr>
87 <td nowrap="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td> 86 <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>
88 <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td> 87 <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>
89 </tr> 88 </tr>
90 <tr> 89 <tr>
91 <td nowrap="nowrap"><label>{#advlink_dlg.popup_size}</label>&nbsp;</td> 90 <td class="nowrap"><label>{#advlink_dlg.popup_size}</label>&nbsp;</td>
92 <td nowrap="nowrap"> 91 <td class="nowrap">
93 <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" /> x 92 <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" /> x
94 <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" /> px 93 <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" /> px
95 </td> 94 </td>
96 </tr> 95 </tr>
97 <tr> 96 <tr>
98 <td nowrap="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label>&nbsp;</td> 97 <td class="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label>&nbsp;</td>
99 <td nowrap="nowrap"> 98 <td class="nowrap">
100 <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" /> / 99 <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" /> /
101 <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" /> (c /c = center) 100 <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" /> (c /c = center)
102 </td> 101 </td>
@@ -109,27 +108,27 @@
109 <table border="0" cellpadding="0" cellspacing="4"> 108 <table border="0" cellpadding="0" cellspacing="4">
110 <tr> 109 <tr>
111 <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td> 110 <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>
112 <td nowrap="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td> 111 <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>
113 <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td> 112 <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>
114 <td nowrap="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td> 113 <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>
115 </tr> 114 </tr>
116 <tr> 115 <tr>
117 <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td> 116 <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>
118 <td nowrap="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td> 117 <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>
119 <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td> 118 <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>
120 <td nowrap="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td> 119 <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>
121 </tr> 120 </tr>
122 <tr> 121 <tr>
123 <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td> 122 <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>
124 <td nowrap="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td> 123 <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>
125 <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td> 124 <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>
126 <td nowrap="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td> 125 <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>
127 </tr> 126 </tr>
128 <tr> 127 <tr>
129 <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td> 128 <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>
130 <td nowrap="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td> 129 <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>
131 <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td> 130 <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>
132 <td nowrap="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td> 131 <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>
133 </tr> 132 </tr>
134 </table> 133 </table>
135 </fieldset> 134 </fieldset>
diff --git a/public/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js b/public/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js
new file mode 100644
index 0000000..220b84a
--- /dev/null
+++ b/public/javascripts/tiny_mce/plugins/autoresize/editor_plugin.js
@@ -0,0 +1 @@
(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;a.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)});a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
new file mode 100644
index 0000000..89a9b89
--- /dev/null
+++ b/public/javascripts/tiny_mce/plugins/autoresize/editor_plugin_src.js
@@ -0,0 +1,114 @@
1/**
2* $Id: editor_plugin_src.js 539 2008-01-14 19:08:58Z spocke $
3*
4* @author Moxiecode
5* @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6*/
7
8(function() {
9 /**
10 * Auto Resize
11 *
12 * This plugin automatically resizes the content area to fit its content height.
13 * It will retain a minimum height, which is the height of the content area when
14 * it's initialized.
15 */
16 tinymce.create('tinymce.plugins.AutoResizePlugin', {
17 /**
18 * Initializes the plugin, this will be executed after the plugin has been created.
19 * This call is done before the editor instance has finished it's initialization so use the onInit event
20 * of the editor instance to intercept that event.
21 *
22 * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
23 * @param {string} url Absolute URL to where the plugin is located.
24 */
25 init : function(ed, url) {
26 var t = this;
27
28 if (ed.getParam('fullscreen_is_enabled'))
29 return;
30
31 /**
32 * This method gets executed each time the editor needs to resize.
33 */
34 function resize() {
35 var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
36
37 // Get height differently depending on the browser used
38 myHeight = tinymce.isIE ? b.scrollHeight : de.offsetHeight;
39
40 // Don't make it smaller than the minimum height
41 if (myHeight > t.autoresize_min_height)
42 resizeHeight = myHeight;
43
44 // Resize content element
45 DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
46
47 // if we're throbbing, we'll re-throb to match the new size
48 if (t.throbbing) {
49 ed.setProgressState(false);
50 ed.setProgressState(true);
51 }
52 };
53
54 t.editor = ed;
55
56 // Define minimum height
57 t.autoresize_min_height = ed.getElement().offsetHeight;
58
59 // Things to do when the editor is ready
60 ed.onInit.add(function(ed, l) {
61 // Show throbber until content area is resized properly
62 ed.setProgressState(true);
63 t.throbbing = true;
64
65 // Hide scrollbars
66 ed.getBody().style.overflowY = "hidden";
67 });
68
69 // Add appropriate listeners for resizing content area
70 ed.onChange.add(resize);
71 ed.onSetContent.add(resize);
72 ed.onPaste.add(resize);
73 ed.onKeyUp.add(resize);
74 ed.onPostRender.add(resize);
75
76 ed.onLoadContent.add(function(ed, l) {
77 resize();
78
79 // Because the content area resizes when its content CSS loads,
80 // and we can't easily add a listener to its onload event,
81 // we'll just trigger a resize after a short loading period
82 setTimeout(function() {
83 resize();
84
85 // Disable throbber
86 ed.setProgressState(false);
87 t.throbbing = false;
88 }, 1250);
89 });
90
91 // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
92 ed.addCommand('mceAutoResize', resize);
93 },
94
95 /**
96 * Returns information about the plugin as a name/value array.
97 * The current keys are longname, author, authorurl, infourl and version.
98 *
99 * @return {Object} Name/value array containing information about the plugin.
100 */
101 getInfo : function() {
102 return {
103 longname : 'Auto Resize',
104 author : 'Moxiecode Systems AB',
105 authorurl : 'http://tinymce.moxiecode.com',
106 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
107 version : tinymce.majorVersion + "." + tinymce.minorVersion
108 };
109 }
110 });
111
112 // Register plugin
113 tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
114})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js b/public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js
index 01a994e..091a063 100755..100644
--- a/public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/autosave/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.AutoSavePlugin',{init:function(ed,url){var t=this;t.editor=ed;window.onbeforeunload=tinymce.plugins.AutoSavePlugin._beforeUnloadHandler;},getInfo:function(){return{longname:'Auto save',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',version:tinymce.majorVersion+"."+tinymce.minorVersion};},'static':{_beforeUnloadHandler:function(){var msg;tinymce.each(tinyMCE.editors,function(ed){if(ed.getParam("fullscreen_is_enabled"))return;if(ed.isDirty()){msg=ed.getLang("autosave.unload_msg");return false;}});return msg;}}});tinymce.PluginManager.add('autosave',tinymce.plugins.AutoSavePlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.AutoSavePlugin",{init:function(a,b){var c=this;c.editor=a;window.onbeforeunload=tinymce.plugins.AutoSavePlugin._beforeUnloadHandler},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:tinymce.majorVersion+"."+tinymce.minorVersion}},"static":{_beforeUnloadHandler:function(){var a;tinymce.each(tinyMCE.editors,function(b){if(b.getParam("fullscreen_is_enabled")){return}if(b.isDirty()){a=b.getLang("autosave.unload_msg");return false}});return a}}});tinymce.PluginManager.add("autosave",tinymce.plugins.AutoSavePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js
index 3c4325a..3c4325a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/autosave/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js b/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js
index 88f7ea6..930fdff 100755..100644
--- a/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.BBCodePlugin',{init:function(ed,url){var t=this,dialect=ed.getParam('bbcode_dialect','punbb').toLowerCase();ed.onBeforeSetContent.add(function(ed,o){o.content=t['_'+dialect+'_bbcode2html'](o.content);});ed.onPostProcess.add(function(ed,o){if(o.set)o.content=t['_'+dialect+'_bbcode2html'](o.content);if(o.get)o.content=t['_'+dialect+'_html2bbcode'](o.content);});},getInfo:function(){return{longname:'BBCode Plugin',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_punbb_html2bbcode:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str);};rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");rep(/<font>(.*?)<\/font>/gi,"$1");rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");rep(/<\/(strong|b)>/gi,"[/b]");rep(/<(strong|b)>/gi,"[b]");rep(/<\/(em|i)>/gi,"[/i]");rep(/<(em|i)>/gi,"[i]");rep(/<\/u>/gi,"[/u]");rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");rep(/<u>/gi,"[u]");rep(/<blockquote[^>]*>/gi,"[quote]");rep(/<\/blockquote>/gi,"[/quote]");rep(/<br \/>/gi,"\n");rep(/<br\/>/gi,"\n");rep(/<br>/gi,"\n");rep(/<p>/gi,"");rep(/<\/p>/gi,"\n");rep(/&nbsp;/gi," ");rep(/&quot;/gi,"\"");rep(/&lt;/gi,"<");rep(/&gt;/gi,">");rep(/&amp;/gi,"&");return s;},_punbb_bbcode2html:function(s){s=tinymce.trim(s);function rep(re,str){s=s.replace(re,str);};rep(/\n/gi,"<br />");rep(/\[b\]/gi,"<strong>");rep(/\[\/b\]/gi,"</strong>");rep(/\[i\]/gi,"<em>");rep(/\[\/i\]/gi,"</em>");rep(/\[u\]/gi,"<u>");rep(/\[\/u\]/gi,"</u>");rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");return s;}});tinymce.PluginManager.add('bbcode',tinymce.plugins.BBCodePlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/&nbsp;/gi," ");b(/&quot;/gi,'"');b(/&lt;/gi,"<");b(/&gt;/gi,">");b(/&amp;/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
index 1d7493e..1d7493e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/bbcode/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin.js b/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin.js
deleted file mode 100755
index 02a1da8..0000000
--- a/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin.js
+++ /dev/null
@@ -1 +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;if(!s)return s;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);})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin_src.js
deleted file mode 100755
index 60d4f2d..0000000
--- a/public/javascripts/tiny_mce/plugins/compat2x/editor_plugin_src.js
+++ /dev/null
@@ -1,616 +0,0 @@
1/**
2 * $Id: editor_plugin_src.js 264 2007-04-26 20:53:09Z spocke $
3 *
4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6 */
7
8(function() {
9 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;
10
11 tinymce.create('tinymce.plugins.Compat2x', {
12 getInfo : function() {
13 return {
14 longname : 'Compat2x',
15 author : 'Moxiecode Systems AB',
16 authorurl : 'http://tinymce.moxiecode.com',
17 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/compat2x',
18 version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
19 };
20 }
21 });
22
23 (function() {
24 // Extend tinyMCE/EditorManager
25 tinymce.extend(tinyMCE, {
26 addToLang : function(p, l) {
27 each(l, function(v, k) {
28 tinyMCE.i18n[(tinyMCE.settings.language || 'en') + '.' + (p ? p + '_' : '') + k] = v;
29 });
30 },
31
32 getInstanceById : function(n) {
33 return this.get(n);
34 }
35 });
36 })();
37
38 (function() {
39 var EditorManager = tinymce.EditorManager;
40
41 tinyMCE.instances = {};
42 tinyMCE.plugins = {};
43 tinymce.PluginManager.onAdd.add(function(pm, n, p) {
44 tinyMCE.plugins[n] = p;
45 });
46
47 tinyMCE.majorVersion = tinymce.majorVersion;
48 tinyMCE.minorVersion = tinymce.minorVersion;
49 tinyMCE.releaseDate = tinymce.releaseDate;
50 tinyMCE.baseURL = tinymce.baseURL;
51 tinyMCE.isIE = tinyMCE.isMSIE = tinymce.isIE || tinymce.isOpera;
52 tinyMCE.isMSIE5 = tinymce.isIE;
53 tinyMCE.isMSIE5_0 = tinymce.isIE;
54 tinyMCE.isMSIE7 = tinymce.isIE;
55 tinyMCE.isGecko = tinymce.isGecko;
56 tinyMCE.isSafari = tinymce.isWebKit;
57 tinyMCE.isOpera = tinymce.isOpera;
58 tinyMCE.isMac = false;
59 tinyMCE.isNS7 = false;
60 tinyMCE.isNS71 = false;
61 tinyMCE.compat = true;
62
63 // Extend tinyMCE class
64 TinyMCE_Engine = tinyMCE;
65 tinymce.extend(tinyMCE, {
66 getParam : function(n, dv) {
67 return this.activeEditor.getParam(n, dv);
68 },
69
70 addEvent : function(e, na, f, sc) {
71 tinymce.dom.Event.add(e, na, f, sc || this);
72 },
73
74 getControlHTML : function(n) {
75 return EditorManager.activeEditor.controlManager.createControl(n);
76 },
77
78 loadCSS : function(u) {
79 tinymce.DOM.loadCSS(u);
80 },
81
82 importCSS : function(doc, u) {
83 if (doc == document)
84 this.loadCSS(u);
85 else
86 new tinymce.dom.DOMUtils(doc).loadCSS(u);
87 },
88
89 log : function() {
90 console.debug.apply(console, arguments);
91 },
92
93 getLang : function(n, dv) {
94 var v = EditorManager.activeEditor.getLang(n.replace(/^lang_/g, ''), dv);
95
96 // Is number
97 if (/^[0-9\-.]+$/g.test(v))
98 return parseInt(v);
99
100 return v;
101 },
102
103 isInstance : function(o) {
104 return o != null && typeof(o) == "object" && o.execCommand;
105 },
106
107 triggerNodeChange : function() {
108 EditorManager.activeEditor.nodeChanged();
109 },
110
111 regexpReplace : function(in_str, reg_exp, replace_str, opts) {
112 var re;
113
114 if (in_str == null)
115 return in_str;
116
117 if (typeof(opts) == "undefined")
118 opts = 'g';
119
120 re = new RegExp(reg_exp, opts);
121
122 return in_str.replace(re, replace_str);
123 },
124
125 trim : function(s) {
126 return tinymce.trim(s);
127 },
128
129 xmlEncode : function(s) {
130 return tinymce.DOM.encode(s);
131 },
132
133 explode : function(s, d) {
134 var o = [];
135
136 tinymce.each(s.split(d), function(v) {
137 if (v != '')
138 o.push(v);
139 });
140
141 return o;
142 },
143
144 switchClass : function(id, cls) {
145 var b;
146
147 if (/^mceButton/.test(cls)) {
148 b = EditorManager.activeEditor.controlManager.get(id);
149
150 if (!b)
151 return;
152
153 switch (cls) {
154 case "mceButtonNormal":
155 b.setDisabled(false);
156 b.setActive(false);
157 return;
158
159 case "mceButtonDisabled":
160 b.setDisabled(true);
161 return;
162
163 case "mceButtonSelected":
164 b.setActive(true);
165 b.setDisabled(false);
166 return;
167 }
168 }
169 },
170
171 addCSSClass : function(e, n, b) {
172 return tinymce.DOM.addClass(e, n, b);
173 },
174
175 hasCSSClass : function(e, n) {
176 return tinymce.DOM.hasClass(e, n);
177 },
178
179 removeCSSClass : function(e, n) {
180 return tinymce.DOM.removeClass(e, n);
181 },
182
183 getCSSClasses : function() {
184 var cl = EditorManager.activeEditor.dom.getClasses(), o = [];
185
186 each(cl, function(c) {
187 o.push(c['class']);
188 });
189
190 return o;
191 },
192
193 setWindowArg : function(n, v) {
194 EditorManager.activeEditor.windowManager.params[n] = v;
195 },
196
197 getWindowArg : function(n, dv) {
198 var wm = EditorManager.activeEditor.windowManager, v;
199
200 v = wm.getParam(n);
201 if (v === '')
202 return '';
203
204 return v || wm.getFeature(n) || dv;
205 },
206
207 getParentNode : function(n, f) {
208 return this._getDOM().getParent(n, f);
209 },
210
211 selectElements : function(n, na, f) {
212 var i, a = [], nl, x;
213
214 for (x=0, na = na.split(','); x<na.length; x++)
215 for (i=0, nl = n.getElementsByTagName(na[x]); i<nl.length; i++)
216 (!f || f(nl[i])) && a.push(nl[i]);
217
218 return a;
219 },
220
221 getNodeTree : function(n, na, t, nn) {
222 return this.selectNodes(n, function(n) {
223 return (!t || n.nodeType == t) && (!nn || n.nodeName == nn);
224 }, na ? na : []);
225 },
226
227 getAttrib : function(e, n, dv) {
228 return this._getDOM().getAttrib(e, n, dv);
229 },
230
231 setAttrib : function(e, n, v) {
232 return this._getDOM().setAttrib(e, n, v);
233 },
234
235 getElementsByAttributeValue : function(n, e, a, v) {
236 var i, nl = n.getElementsByTagName(e), o = [];
237
238 for (i=0; i<nl.length; i++) {
239 if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)
240 o[o.length] = nl[i];
241 }
242
243 return o;
244 },
245
246 selectNodes : function(n, f, a) {
247 var i;
248
249 if (!a)
250 a = [];
251
252 if (f(n))
253 a[a.length] = n;
254
255 if (n.hasChildNodes()) {
256 for (i=0; i<n.childNodes.length; i++)
257 tinyMCE.selectNodes(n.childNodes[i], f, a);
258 }
259
260 return a;
261 },
262
263 getContent : function() {
264 return EditorManager.activeEditor.getContent();
265 },
266
267 getParentElement : function(n, na, f) {
268 if (na)
269 na = new RegExp('^(' + na.toUpperCase().replace(/,/g, '|') + ')$', 'g');
270
271 return this._getDOM().getParent(n, function(n) {
272 return n.nodeType == 1 && (!na || na.test(n.nodeName)) && (!f || f(n));
273 }, this.activeEditor.getBody());
274 },
275
276 importPluginLanguagePack : function(n) {
277 tinymce.PluginManager.requireLangPack(n);
278 },
279
280 getButtonHTML : function(cn, lang, img, c, u, v) {
281 var ed = EditorManager.activeEditor;
282
283 img = img.replace(/\{\$pluginurl\}/g, tinyMCE.pluginURL);
284 img = img.replace(/\{\$themeurl\}/g, tinyMCE.themeURL);
285 lang = lang.replace(/^lang_/g, '');
286
287 return ed.controlManager.createButton(cn, {
288 title : lang,
289 command : c,
290 ui : u,
291 value : v,
292 scope : this,
293 'class' : 'compat',
294 image : img
295 });
296 },
297
298 addSelectAccessibility : function(e, s, w) {
299 // Add event handlers
300 if (!s._isAccessible) {
301 s.onkeydown = tinyMCE.accessibleEventHandler;
302 s.onblur = tinyMCE.accessibleEventHandler;
303 s._isAccessible = true;
304 s._win = w;
305 }
306
307 return false;
308 },
309
310 accessibleEventHandler : function(e) {
311 var elm, win = this._win;
312
313 e = tinymce.isIE ? win.event : e;
314 elm = tinymce.isIE ? e.srcElement : e.target;
315
316 // Unpiggyback onchange on blur
317 if (e.type == "blur") {
318 if (elm.oldonchange) {
319 elm.onchange = elm.oldonchange;
320 elm.oldonchange = null;
321 }
322
323 return true;
324 }
325
326 // Piggyback onchange
327 if (elm.nodeName == "SELECT" && !elm.oldonchange) {
328 elm.oldonchange = elm.onchange;
329 elm.onchange = null;
330 }
331
332 // Execute onchange and remove piggyback
333 if (e.keyCode == 13 || e.keyCode == 32) {
334 elm.onchange = elm.oldonchange;
335 elm.onchange();
336 elm.oldonchange = null;
337
338 tinyMCE.cancelEvent(e);
339 return false;
340 }
341
342 return true;
343 },
344
345 cancelEvent : function(e) {
346 return tinymce.dom.Event.cancel(e);
347 },
348
349 handleVisualAid : function(e) {
350 EditorManager.activeEditor.addVisual(e);
351 },
352
353 getAbsPosition : function(n, r) {
354 return tinymce.DOM.getPos(n, r);
355 },
356
357 cleanupEventStr : function(s) {
358 s = "" + s;
359 s = s.replace('function anonymous()\n{\n', '');
360 s = s.replace('\n}', '');
361 s = s.replace(/^return true;/gi, ''); // Remove event blocker
362
363 return s;
364 },
365
366 getVisualAidClass : function(s) {
367 // TODO: Implement
368 return s;
369 },
370
371 parseStyle : function(s) {
372 return this._getDOM().parseStyle(s);
373 },
374
375 serializeStyle : function(s) {
376 return this._getDOM().serializeStyle(s);
377 },
378
379 openWindow : function(tpl, args) {
380 var ed = EditorManager.activeEditor, o = {}, n;
381
382 // Convert name/value array to object
383 for (n in tpl)
384 o[n] = tpl[n];
385
386 tpl = o;
387
388 args = args || {};
389 tpl.url = new tinymce.util.URI(tinymce.ThemeManager.themeURLs[ed.settings.theme]).toAbsolute(tpl.file);
390 tpl.inline = tpl.inline || args.inline;
391
392 ed.windowManager.open(tpl, args);
393 },
394
395 closeWindow : function(win) {
396 EditorManager.activeEditor.windowManager.close(win);
397 },
398
399 getOuterHTML : function(e) {
400 return tinymce.DOM.getOuterHTML(e);
401 },
402
403 setOuterHTML : function(e, h, d) {
404 return tinymce.DOM.setOuterHTML(e, h, d);
405 },
406
407 hasPlugin : function(n) {
408 return tinymce.PluginManager.get(n) != null;
409 },
410
411 _setEventsEnabled : function() {
412 // Ignore it!!
413 },
414
415 addPlugin : function(pn, f) {
416 var t = this;
417
418 function PluginWrapper(ed) {
419 tinyMCE.selectedInstance = ed;
420
421 ed.onInit.add(function() {
422 t.settings = ed.settings;
423 t.settings['base_href'] = tinyMCE.documentBasePath;
424 tinyMCE.settings = t.settings;
425 tinyMCE.documentBasePath = ed.documentBasePath;
426 //ed.formElement = DOM.get(ed.id);
427
428 if (f.initInstance)
429 f.initInstance(ed);
430
431 ed.contentDocument = ed.getDoc();
432 ed.contentWindow = ed.getWin();
433 ed.undoRedo = ed.undoManager;
434 ed.startContent = ed.getContent({format : 'raw'});
435
436 tinyMCE.instances[ed.id] = ed;
437 tinyMCE.loadedFiles = [];
438 });
439
440 ed.onActivate.add(function() {
441 tinyMCE.settings = ed.settings;
442 tinyMCE.selectedInstance = ed;
443 });
444
445 /* if (f.removeInstance) {
446 ed.onDestroy.add(function() {
447 return f.removeInstance(ed.id);
448 });
449 }*/
450
451 if (f.handleNodeChange) {
452 ed.onNodeChange.add(function(ed, cm, n) {
453 f.handleNodeChange(ed.id, n, 0, 0, false, !ed.selection.isCollapsed());
454 });
455 }
456
457 if (f.onChange) {
458 ed.onChange.add(function(ed, n) {
459 return f.onChange(ed);
460 });
461 }
462
463 if (f.cleanup) {
464 ed.onGetContent.add(function() {
465 //f.cleanup(type, content, inst);
466 });
467 }
468
469 this.getInfo = function() {
470 return f.getInfo();
471 };
472
473 this.createControl = function(n) {
474 tinyMCE.pluginURL = tinymce.baseURL + '/plugins/' + pn;
475 tinyMCE.themeURL = tinymce.baseURL + '/themes/' + tinyMCE.activeEditor.settings.theme;
476
477 if (f.getControlHTML)
478 return f.getControlHTML(n);
479
480 return null;
481 };
482
483 this.execCommand = function(cmd, ui, val) {
484 if (f.execCommand)
485 return f.execCommand(ed.id, ed.getBody(), cmd, ui, val);
486
487 return false;
488 };
489 };
490
491 tinymce.PluginManager.add(pn, PluginWrapper);
492 },
493
494 _getDOM : function() {
495 return tinyMCE.activeEditor ? tinyMCE.activeEditor.dom : tinymce.DOM;
496 },
497
498 convertRelativeToAbsoluteURL : function(b, u) {
499 return new tinymce.util.URI(b).toAbsolute(u);
500 },
501
502 convertAbsoluteURLToRelativeURL : function(b, u) {
503 return new tinymce.util.URI(b).toRelative(u);
504 }
505 });
506
507 // Extend Editor class
508 tinymce.extend(tinymce.Editor.prototype, {
509 getFocusElement : function() {
510 return this.selection.getNode();
511 },
512
513 getData : function(n) {
514 if (!this.data)
515 this.data = [];
516
517 if (!this.data[n])
518 this.data[n] = [];
519
520 return this.data[n];
521 },
522
523 hasPlugin : function(n) {
524 return this.plugins[n] != null;
525 },
526
527 getContainerWin : function() {
528 return window;
529 },
530
531 getHTML : function(raw) {
532 return this.getContent({ format : raw ? 'raw' : 'html'});
533 },
534
535 setHTML : function(h) {
536 this.setContent(h);
537 },
538
539 getSel : function() {
540 return this.selection.getSel();
541 },
542
543 getRng : function() {
544 return this.selection.getRng();
545 },
546
547 isHidden : function() {
548 var s;
549
550 if (!tinymce.isGecko)
551 return false;
552
553 s = this.getSel();
554
555 // Weird, wheres that cursor selection?
556 return (!s || !s.rangeCount || s.rangeCount == 0);
557 },
558
559 translate : function(s) {
560 var c = this.settings.language, o;
561
562 if (!s)
563 return s;
564
565 o = tinymce.EditorManager.i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {
566 return tinymce.EditorManager.i18n[c + '.' + b] || '{#' + b + '}';
567 });
568
569 o = o.replace(/{\$lang_([^}]+)\}/g, function(a, b) {
570 return tinymce.EditorManager.i18n[c + '.' + b] || '{$lang_' + b + '}';
571 });
572
573 return o;
574 },
575
576 repaint : function() {
577 this.execCommand('mceRepaint');
578 }
579 });
580
581 // Extend selection
582 tinymce.extend(tinymce.dom.Selection.prototype, {
583 getSelectedText : function() {
584 return this.getContent({format : 'text'});
585 },
586
587 getSelectedHTML : function() {
588 return this.getContent({format : 'html'});
589 },
590
591 getFocusElement : function() {
592 return this.getNode();
593 },
594
595 selectNode : function(node, collapse, select_text_node, to_start) {
596 var t = this;
597
598 t.select(node, select_text_node || 0);
599
600 if (!is(collapse))
601 collapse = true;
602
603 if (collapse) {
604 if (!is(to_start))
605 to_start = true;
606
607 t.collapse(to_start);
608 }
609 }
610 });
611 }).call(this);
612
613 // Register plugin
614 tinymce.PluginManager.add('compat2x', tinymce.plugins.Compat2x);
615})();
616
diff --git a/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js b/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js
index f68744d..24ee2eb 100755..100644
--- a/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin.js
@@ -1 +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(ed.getDoc(),'click',hide);Event.cancel(e);}});function hide(){if(t._menu){t._menu.removeAll();t._menu.destroy();Event.remove(ed.getDoc(),'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+ed.getParam('contextmenu_offset_x',0),offset_y:p1.y+ed.getParam('contextmenu_offset_y',0),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);})(); \ No newline at end of file (function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(g,h){if(!h.ctrlKey){f._getMenu(g).showMenu(h.clientX,h.clientY);a.add(g.getDoc(),"click",e);a.cancel(h)}});function e(){if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(d.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},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(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
index a2c1866..a2c1866 100755..100644
--- a/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/contextmenu/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js b/public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js
index 6966d80..bce8e73 100755..100644
--- a/public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/directionality/editor_plugin.js
@@ -1 +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);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},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(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js
index 81818e3..81818e3 100755..100644
--- a/public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/directionality/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js b/public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js
index 87fac10..4783bc3 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/emotions/editor_plugin.js
@@ -1 +1 @@
(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);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.EmotionsPlugin",{init:function(a,b){a.addCommand("mceEmotion",function(){a.windowManager.open({file:b+"/emotions.htm",width:250+parseInt(a.getLang("emotions.delta_width",0)),height:160+parseInt(a.getLang("emotions.delta_height",0)),inline:1},{plugin_url:b})});a.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)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js
index df0d370..df0d370 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/emotions/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/emotions/emotions.htm b/public/javascripts/tiny_mce/plugins/emotions/emotions.htm
index 8110ee0..55a1d72 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/emotions.htm
+++ b/public/javascripts/tiny_mce/plugins/emotions/emotions.htm
@@ -1,10 +1,9 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml"> 2<html xmlns="http://www.w3.org/1999/xhtml">
3<head> 3<head>
4 <title>{#emotions_dlg.title}</title> 4 <title>{#emotions_dlg.title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="js/emotions.js"></script> 6 <script type="text/javascript" src="js/emotions.js"></script>
7 <base target="_self" />
8</head> 7</head>
9<body style="display: none"> 8<body style="display: none">
10 <div align="center"> 9 <div align="center">
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif
index ba90cc3..ba90cc3 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cool.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif
index 74d897a..74d897a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-cry.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
index 963a96b..963a96b 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-embarassed.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
index 16f68cc..16f68cc 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-foot-in-mouth.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif
index 716f55e..716f55e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-frown.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif
index 334d49e..334d49e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-innocent.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif
index 4efd549..4efd549 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-kiss.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif
index 1606c11..1606c11 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-laughing.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
index ca2451e..ca2451e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-money-mouth.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif
index b33d3cc..b33d3cc 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-sealed.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif
index e6a9e60..e6a9e60 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-smile.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif
index cb99cdd..cb99cdd 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-surprised.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
index 2075dc1..2075dc1 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-tongue-out.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif
index bef7e25..bef7e25 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-undecided.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif
index 9faf1af..9faf1af 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-wink.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif
index 648e6e8..648e6e8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif
+++ b/public/javascripts/tiny_mce/plugins/emotions/img/smiley-yell.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/emotions/js/emotions.js b/public/javascripts/tiny_mce/plugins/emotions/js/emotions.js
index c549367..c549367 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/js/emotions.js
+++ b/public/javascripts/tiny_mce/plugins/emotions/js/emotions.js
diff --git a/public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js
index 3b57ad9..3b57ad9 100755..100644
--- a/public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/emotions/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/example/dialog.htm b/public/javascripts/tiny_mce/plugins/example/dialog.htm
index b4c6284..b4c6284 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/dialog.htm
+++ b/public/javascripts/tiny_mce/plugins/example/dialog.htm
diff --git a/public/javascripts/tiny_mce/plugins/example/editor_plugin.js b/public/javascripts/tiny_mce/plugins/example/editor_plugin.js
index cb7010d..ec1f81e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/example/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.PluginManager.requireLangPack('example');tinymce.create('tinymce.plugins.ExamplePlugin',{init:function(ed,url){ed.addCommand('mceExample',function(){ed.windowManager.open({file:url+'/dialog.htm',width:320+parseInt(ed.getLang('example.delta_width',0)),height:120+parseInt(ed.getLang('example.delta_height',0)),inline:1},{plugin_url:url,some_custom_arg:'custom arg'});});ed.addButton('example',{title:'example.desc',cmd:'mceExample',image:url+'/img/example.gif'});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('example',n.nodeName=='IMG');});},createControl:function(n,cm){return null;},getInfo:function(){return{longname:'Example plugin',author:'Some author',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',version:"1.0"};}});tinymce.PluginManager.add('example',tinymce.plugins.ExamplePlugin);})(); \ No newline at end of file (function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js
index 5050550..5050550 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/example/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/example/img/example.gif b/public/javascripts/tiny_mce/plugins/example/img/example.gif
index 1ab5da4..1ab5da4 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/img/example.gif
+++ b/public/javascripts/tiny_mce/plugins/example/img/example.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/example/js/dialog.js b/public/javascripts/tiny_mce/plugins/example/js/dialog.js
index fa83411..fa83411 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/js/dialog.js
+++ b/public/javascripts/tiny_mce/plugins/example/js/dialog.js
diff --git a/public/javascripts/tiny_mce/plugins/example/langs/en.js b/public/javascripts/tiny_mce/plugins/example/langs/en.js
index e0784f8..e0784f8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/langs/en.js
+++ b/public/javascripts/tiny_mce/plugins/example/langs/en.js
diff --git a/public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js
index ebcf948..ebcf948 100755..100644
--- a/public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/example/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css b/public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css
index 7a3334f..7a3334f 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css
+++ b/public/javascripts/tiny_mce/plugins/fullpage/css/fullpage.css
diff --git a/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js b/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js
index 727beb5..8e11bfc 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.FullPagePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceFullPageProperties',function(){ed.windowManager.open({file:url+'/fullpage.htm',width:430+parseInt(ed.getLang('fullpage.delta_width',0)),height:495+parseInt(ed.getLang('fullpage.delta_height',0)),inline:1},{plugin_url:url,head_html:t.head});});ed.addButton('fullpage',{title:'fullpage.desc',cmd:'mceFullPageProperties'});ed.onBeforeSetContent.add(t._setContent,t);ed.onSetContent.add(t._setBodyAttribs,t);ed.onGetContent.add(t._getContent,t);},getInfo:function(){return{longname:'Fullpage',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_setBodyAttribs:function(ed,o){var bdattr,i,len,kv,k,v,t,attr=this.head.match(/body(.*?)>/i);if(attr&&attr[1]){bdattr=attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(bdattr){for(i=0,len=bdattr.length;i<len;i++){kv=bdattr[i].split('=');k=kv[0].replace(/\s/,'');v=kv[1];if(v){v=v.replace(/^\s+/,'').replace(/\s+$/,'');t=v.match(/^["'](.*)["']$/);if(t)v=t[1];}else v=k;ed.dom.setAttrib(ed.getBody(),'style',v);}}}},_createSerializer:function(){return new tinymce.dom.Serializer({dom:this.editor.dom,apply_source_formatting:true});},_setContent:function(ed,o){var t=this,sp,ep,c=o.content,v,st='';c=c.replace(/<(\/?)BODY/gi,'<$1body');sp=c.indexOf('<body');if(sp!=-1){sp=c.indexOf('>',sp);t.head=c.substring(0,sp+1);ep=c.indexOf('</body',sp);if(ep==-1)ep=c.indexOf('</body',ep);o.content=c.substring(sp+1,ep);t.foot=c.substring(ep);function low(s){return s.replace(/<\/?[A-Z]+/g,function(a){return a.toLowerCase();})};t.head=low(t.head);t.foot=low(t.foot);}else{t.head='';if(ed.getParam('fullpage_default_xml_pi'))t.head+='<?xml version="1.0" encoding="'+ed.getParam('fullpage_default_encoding','ISO-8859-1')+'" ?>\n';t.head+=ed.getParam('fullpage_default_doctype','<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');t.head+='\n<html>\n<head>\n<title>'+ed.getParam('fullpage_default_title','Untitled document')+'</title>\n';if(v=ed.getParam('fullpage_default_encoding'))t.head+='<meta http-equiv="Content-Type" content="'+v+'" />\n';if(v=ed.getParam('fullpage_default_font_family'))st+='font-family: '+v+';';if(v=ed.getParam('fullpage_default_font_size'))st+='font-size: '+v+';';if(v=ed.getParam('fullpage_default_text_color'))st+='color: '+v+';';t.head+='</head>\n<body'+(st?' style="'+st+'"':'')+'>\n';t.foot='\n</body>\n</html>';}},_getContent:function(ed,o){var t=this;o.content=tinymce.trim(t.head)+'\n'+tinymce.trim(o.content)+'\n'+tinymce.trim(t.foot);}});tinymce.PluginManager.add('fullpage',tinymce.plugins.FullPagePlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceFullPageProperties",function(){a.windowManager.open({file:b+"/fullpage.htm",width:430+parseInt(a.getLang("fullpage.delta_width",0)),height:495+parseInt(a.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:b,head_html:c.head})});a.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});a.onBeforeSetContent.add(c._setContent,c);a.onSetContent.add(c._setBodyAttribs,c);a.onGetContent.add(c._getContent,c)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_setBodyAttribs:function(d,a){var l,c,e,g,b,h,j,f=this.head.match(/body(.*?)>/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c<e;c++){g=l[c].split("=");b=g[0].replace(/\s/,"");h=g[1];if(h){h=h.replace(/^\s+/,"").replace(/\s+$/,"");j=h.match(/^["'](.*)["']$/);if(j){h=j[1]}}else{h=b}d.dom.setAttrib(d.getBody(),"style",h)}}}},_createSerializer:function(){return new tinymce.dom.Serializer({dom:this.editor.dom,apply_source_formatting:true})},_setContent:function(d,b){var h=this,a,j,f=b.content,g,i="";if(b.source_view&&d.getParam("fullpage_hide_in_source_view")){return}f=f.replace(/<(\/?)BODY/gi,"<$1body");a=f.indexOf("<body");if(a!=-1){a=f.indexOf(">",a);h.head=f.substring(0,a+1);j=f.indexOf("</body",a);if(j==-1){j=f.indexOf("</body",j)}b.content=f.substring(a+1,j);h.foot=f.substring(j);function e(c){return c.replace(/<\/?[A-Z]+/g,function(k){return k.toLowerCase()})}h.head=e(h.head);h.foot=e(h.foot)}else{h.head="";if(d.getParam("fullpage_default_xml_pi")){h.head+='<?xml version="1.0" encoding="'+d.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}h.head+=d.getParam("fullpage_default_doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');h.head+="\n<html>\n<head>\n<title>"+d.getParam("fullpage_default_title","Untitled document")+"</title>\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='<meta http-equiv="Content-Type" content="'+g+'" />\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="</head>\n<body"+(i?' style="'+i+'"':"")+">\n";h.foot="\n</body>\n</html>"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
index 019682d..c7d5aca 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/fullpage/editor_plugin_src.js
@@ -1,5 +1,5 @@
1/** 1/**
2 * $Id: editor_plugin_src.js 920 2008-09-09 14:05:33Z spocke $ 2 * $Id: editor_plugin_src.js 1029 2009-02-24 22:32:21Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
@@ -82,6 +82,9 @@
82 _setContent : function(ed, o) { 82 _setContent : function(ed, o) {
83 var t = this, sp, ep, c = o.content, v, st = ''; 83 var t = this, sp, ep, c = o.content, v, st = '';
84 84
85 if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))
86 return;
87
85 // Parse out head, body and footer 88 // Parse out head, body and footer
86 c = c.replace(/<(\/?)BODY/gi, '<$1body'); 89 c = c.replace(/<(\/?)BODY/gi, '<$1body');
87 sp = c.indexOf('<body'); 90 sp = c.indexOf('<body');
@@ -133,7 +136,8 @@
133 _getContent : function(ed, o) { 136 _getContent : function(ed, o) {
134 var t = this; 137 var t = this;
135 138
136 o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot); 139 if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))
140 o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot);
137 } 141 }
138 }); 142 });
139 143
diff --git a/public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm b/public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm
index d74da0d..3ea4081 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm
+++ b/public/javascripts/tiny_mce/plugins/fullpage/fullpage.htm
@@ -7,7 +7,6 @@
7 <script type="text/javascript" src="../../utils/form_utils.js"></script> 7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="js/fullpage.js"></script> 8 <script type="text/javascript" src="js/fullpage.js"></script>
9 <link href="css/fullpage.css" rel="stylesheet" type="text/css" /> 9 <link href="css/fullpage.css" rel="stylesheet" type="text/css" />
10 <base target="_self" />
11</head> 10</head>
12<body id="advlink" style="display: none"> 11<body id="advlink" style="display: none">
13 <form onsubmit="updateAction();return false;" name="fullpage" action="#"> 12 <form onsubmit="updateAction();return false;" name="fullpage" action="#">
@@ -26,27 +25,27 @@
26 25
27 <table border="0" cellpadding="4" cellspacing="0"> 26 <table border="0" cellpadding="4" cellspacing="0">
28 <tr> 27 <tr>
29 <td nowrap="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td> 28 <td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>
30 <td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td> 29 <td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>
31 </tr> 30 </tr>
32 <tr> 31 <tr>
33 <td nowrap="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td> 32 <td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>
34 <td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td> 33 <td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>
35 </tr> 34 </tr>
36 <tr> 35 <tr>
37 <td nowrap="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td> 36 <td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>
38 <td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td> 37 <td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>
39 </tr> 38 </tr>
40 <tr> 39 <tr>
41 <td nowrap="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td> 40 <td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>
42 <td><input type="text" id="metaauthor" name="metaauthor" value="" /></td> 41 <td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>
43 </tr> 42 </tr>
44 <tr> 43 <tr>
45 <td nowrap="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td> 44 <td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>
46 <td><input type="text" id="metacopyright" name="metacopyright" value="" /></td> 45 <td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>
47 </tr> 46 </tr>
48 <tr> 47 <tr>
49 <td nowrap="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td> 48 <td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>
50 <td> 49 <td>
51 <select id="metarobots" name="metarobots"> 50 <select id="metarobots" name="metarobots">
52 <option value="">{#not_set}</option> 51 <option value="">{#not_set}</option>
@@ -73,7 +72,7 @@
73 </td> 72 </td>
74 </tr> 73 </tr>
75 <tr> 74 <tr>
76 <td nowrap="nowrap"><label for="doctypes">{#fullpage_dlg.doctypes}</label>&nbsp;</td> 75 <td class="nowrap"><label for="doctypes">{#fullpage_dlg.doctypes}</label>&nbsp;</td>
77 <td> 76 <td>
78 <select id="doctypes" name="doctypes"> 77 <select id="doctypes" name="doctypes">
79 <option value="">{#not_set}</option> 78 <option value="">{#not_set}</option>
@@ -81,7 +80,7 @@
81 </td> 80 </td>
82 </tr> 81 </tr>
83 <tr> 82 <tr>
84 <td nowrap="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td> 83 <td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>
85 <td><input type="text" id="langcode" name="langcode" value="" /></td> 84 <td><input type="text" id="langcode" name="langcode" value="" /></td>
86 </tr> 85 </tr>
87 <tr> 86 <tr>
@@ -95,7 +94,7 @@
95 </td> 94 </td>
96 </tr> 95 </tr>
97 <tr> 96 <tr>
98 <td nowrap="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td> 97 <td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>
99 <td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td> 98 <td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>
100 </tr> 99 </tr>
101 </table> 100 </table>
diff --git a/public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js b/public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js
index 89059ef..dd3a29c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js
+++ b/public/javascripts/tiny_mce/plugins/fullpage/js/fullpage.js
@@ -123,7 +123,7 @@ function init() {
123 // Parse xml and doctype 123 // Parse xml and doctype
124 xmlVer = getReItem(/<\?\s*?xml.*?version\s*?=\s*?"(.*?)".*?\?>/gi, h, 1); 124 xmlVer = getReItem(/<\?\s*?xml.*?version\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);
125 xmlEnc = getReItem(/<\?\s*?xml.*?encoding\s*?=\s*?"(.*?)".*?\?>/gi, h, 1); 125 xmlEnc = getReItem(/<\?\s*?xml.*?encoding\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);
126 docType = getReItem(/<\!DOCTYPE.*?>/gi, h, 0); 126 docType = getReItem(/<\!DOCTYPE.*?>/gi, h.replace(/\n/g, ''), 0).replace(/ +/g, ' ');
127 f.langcode.value = getReItem(/lang="(.*?)"/gi, h, 1); 127 f.langcode.value = getReItem(/lang="(.*?)"/gi, h, 1);
128 128
129 // Parse title 129 // Parse title
diff --git a/public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
index f5801b8..f5801b8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/fullpage/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js b/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js
index fbcec59..dfb3f16 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin.js
@@ -1 +1 @@
(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.plugins.FullScreenPlugin',{init:function(ed,url){var t=this,s={},vp;t.editor=ed;ed.addCommand('mceFullScreen',function(){var win,de=DOM.doc.documentElement;if(ed.getParam('fullscreen_is_enabled')){if(ed.getParam('fullscreen_new_window'))closeFullscreen();else{DOM.win.setTimeout(function(){tinymce.dom.Event.remove(DOM.win,'resize',t.resizeFunc);tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format:'raw'}),{format:'raw'});tinyMCE.remove(ed);DOM.remove('mce_fullscreen_container');de.style.overflow=ed.getParam('fullscreen_html_overflow');DOM.setStyle(DOM.doc.body,'overflow',ed.getParam('fullscreen_overflow'));DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'),ed.getParam('fullscreen_scrolly'));tinyMCE.settings=tinyMCE.oldSettings;},10);}return;}if(ed.getParam('fullscreen_new_window')){win=DOM.win.open(url+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{win.resizeTo(screen.availWidth,screen.availHeight);}catch(e){}}else{tinyMCE.oldSettings=tinyMCE.settings;s.fullscreen_overflow=DOM.getStyle(DOM.doc.body,'overflow',1)||'auto';s.fullscreen_html_overflow=DOM.getStyle(de,'overflow',1);vp=DOM.getViewPort();s.fullscreen_scrollx=vp.x;s.fullscreen_scrolly=vp.y;if(tinymce.isOpera&&s.fullscreen_overflow=='visible')s.fullscreen_overflow='auto';if(tinymce.isIE&&s.fullscreen_overflow=='scroll')s.fullscreen_overflow='auto';if(tinymce.isIE&&(s.fullscreen_html_overflow=='visible'||s.fullscreen_html_overflow=='scroll'))s.fullscreen_html_overflow='auto';if(s.fullscreen_overflow=='0px')s.fullscreen_overflow='';DOM.setStyle(DOM.doc.body,'overflow','hidden');de.style.overflow='hidden';vp=DOM.getViewPort();DOM.win.scrollTo(0,0);if(tinymce.isIE)vp.h-=1;n=DOM.add(DOM.doc.body,'div',{id:'mce_fullscreen_container',style:'position:'+(tinymce.isIE6||(tinymce.isIE&&!DOM.boxModel)?'absolute':'fixed')+';top:0;left:0;width:'+vp.w+'px;height:'+vp.h+'px;z-index:200000;'});DOM.add(n,'div',{id:'mce_fullscreen'});tinymce.each(ed.settings,function(v,n){s[n]=v;});s.id='mce_fullscreen';s.width=n.clientWidth;s.height=n.clientHeight-15;s.fullscreen_is_enabled=true;s.fullscreen_editor_id=ed.id;s.theme_advanced_resizing=false;s.save_onsavecallback=function(){ed.setContent(tinyMCE.get(s.id).getContent({format:'raw'}),{format:'raw'});ed.execCommand('mceSave');};tinymce.each(ed.getParam('fullscreen_settings'),function(v,k){s[k]=v;});if(s.theme_advanced_toolbar_location==='external')s.theme_advanced_toolbar_location='top';t.fullscreenEditor=new tinymce.Editor('mce_fullscreen',s);t.fullscreenEditor.onInit.add(function(){t.fullscreenEditor.setContent(ed.getContent());t.fullscreenEditor.focus();});t.fullscreenEditor.render();tinyMCE.add(t.fullscreenEditor);t.fullscreenElement=new tinymce.dom.Element('mce_fullscreen_container');t.fullscreenElement.update();t.resizeFunc=tinymce.dom.Event.add(DOM.win,'resize',function(){var vp=tinymce.DOM.getViewPort();t.fullscreenEditor.theme.resizeTo(vp.w,vp.h);});}});ed.addButton('fullscreen',{title:'fullscreen.desc',cmd:'mceFullScreen'});ed.onNodeChange.add(function(ed,cm){cm.setActive('fullscreen',ed.getParam('fullscreen_is_enabled'));});},getInfo:function(){return{longname:'Fullscreen',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('fullscreen',tinymce.plugins.FullScreenPlugin);})(); \ No newline at end of file (function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(c,d){var e=this,f={},b;e.editor=c;c.addCommand("mceFullScreen",function(){var h,i=a.doc.documentElement;if(c.getParam("fullscreen_is_enabled")){if(c.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",e.resizeFunc);tinyMCE.get(c.getParam("fullscreen_editor_id")).setContent(c.getContent({format:"raw"}),{format:"raw"});tinyMCE.remove(c);a.remove("mce_fullscreen_container");i.style.overflow=c.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",c.getParam("fullscreen_overflow"));a.win.scrollTo(c.getParam("fullscreen_scrollx"),c.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(c.getParam("fullscreen_new_window")){h=a.win.open(d+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{h.resizeTo(screen.availWidth,screen.availHeight)}catch(g){}}else{tinyMCE.oldSettings=tinyMCE.settings;f.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";f.fullscreen_html_overflow=a.getStyle(i,"overflow",1);b=a.getViewPort();f.fullscreen_scrollx=b.x;f.fullscreen_scrolly=b.y;if(tinymce.isOpera&&f.fullscreen_overflow=="visible"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&f.fullscreen_overflow=="scroll"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&(f.fullscreen_html_overflow=="visible"||f.fullscreen_html_overflow=="scroll")){f.fullscreen_html_overflow="auto"}if(f.fullscreen_overflow=="0px"){f.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");i.style.overflow="hidden";b=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){b.h-=1}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+(tinymce.isIE6||(tinymce.isIE&&!a.boxModel)?"absolute":"fixed")+";top:0;left:0;width:"+b.w+"px;height:"+b.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(c.settings,function(j,k){f[k]=j});f.id="mce_fullscreen";f.width=n.clientWidth;f.height=n.clientHeight-15;f.fullscreen_is_enabled=true;f.fullscreen_editor_id=c.id;f.theme_advanced_resizing=false;f.save_onsavecallback=function(){c.setContent(tinyMCE.get(f.id).getContent({format:"raw"}),{format:"raw"});c.execCommand("mceSave")};tinymce.each(c.getParam("fullscreen_settings"),function(l,j){f[j]=l});if(f.theme_advanced_toolbar_location==="external"){f.theme_advanced_toolbar_location="top"}e.fullscreenEditor=new tinymce.Editor("mce_fullscreen",f);e.fullscreenEditor.onInit.add(function(){e.fullscreenEditor.setContent(c.getContent());e.fullscreenEditor.focus()});e.fullscreenEditor.render();tinyMCE.add(e.fullscreenEditor);e.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");e.fullscreenElement.update();e.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var j=tinymce.DOM.getViewPort();e.fullscreenEditor.theme.resizeTo(j.w,j.h)})}});c.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});c.onNodeChange.add(function(h,g){g.setActive("fullscreen",h.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
index 77a8c3b..77a8c3b 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/fullscreen/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm b/public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm
index 4b081ca..6ec4f26 100755..100644
--- a/public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm
+++ b/public/javascripts/tiny_mce/plugins/fullscreen/fullscreen.htm
@@ -96,7 +96,6 @@
96 // Add onunload 96 // Add onunload
97 tinymce.dom.Event.add(window, "beforeunload", unloadHandler); 97 tinymce.dom.Event.add(window, "beforeunload", unloadHandler);
98 </script> 98 </script>
99 <base target="_self" />
100</head> 99</head>
101<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no"> 100<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">
102<form onsubmit="doParentSubmit();"> 101<form onsubmit="doParentSubmit();">
diff --git a/public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js b/public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js
index 06dae75..e9cba10 100755..100644
--- a/public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/iespell/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.IESpell',{init:function(ed,url){var t=this,sp;if(!tinymce.isIE)return;t.editor=ed;ed.addCommand('mceIESpell',function(){try{sp=new ActiveXObject("ieSpell.ieSpellExtension");sp.CheckDocumentNode(ed.getDoc().documentElement);}catch(e){if(e.number==-2146827859){ed.windowManager.confirm(ed.getLang("iespell.download"),function(s){if(s)window.open('http://www.iespell.com/download.php','ieSpellDownload','');});}else ed.windowManager.alert("Error Loading ieSpell: Exception "+e.number);}});ed.addButton('iespell',{title:'iespell.iespell_desc',cmd:'mceIESpell'});},getInfo:function(){return{longname:'IESpell (IE Only)',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('iespell',tinymce.plugins.IESpell);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js
index a68f69a..a68f69a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/iespell/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js b/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
index 5560b6b..07ea477 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin.js
@@ -1 +1 @@
(function(){var DOM=tinymce.DOM,Element=tinymce.dom.Element,Event=tinymce.dom.Event,each=tinymce.each,is=tinymce.is;tinymce.create('tinymce.plugins.InlinePopups',{init:function(ed,url){ed.onBeforeRenderUI.add(function(){ed.windowManager=new tinymce.InlineWindowManager(ed);DOM.loadCSS(url+'/skins/'+(ed.settings.inlinepopups_skin||'clearlooks2')+"/window.css");});},getInfo:function(){return{longname:'InlinePopups',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager',{InlineWindowManager:function(ed){var t=this;t.parent(ed);t.zIndex=300000;t.count=0;t.windows={};},open:function(f,p){var t=this,id,opt='',ed=t.editor,dw=0,dh=0,vp,po,mdf,clf,we,w,u;f=f||{};p=p||{};if(!f.inline)return t.parent(f,p);if(!f.type)t.bookmark=ed.selection.getBookmark('simple');id=DOM.uniqueId();vp=DOM.getViewPort();f.width=parseInt(f.width||320);f.height=parseInt(f.height||240)+(tinymce.isIE?8:0);f.min_width=parseInt(f.min_width||150);f.min_height=parseInt(f.min_height||100);f.max_width=parseInt(f.max_width||2000);f.max_height=parseInt(f.max_height||2000);f.left=f.left||Math.round(Math.max(vp.x,vp.x+(vp.w/ 2.0) - (f.width /2.0)));f.top=f.top||Math.round(Math.max(vp.y,vp.y+(vp.h/ 2.0) - (f.height /2.0)));f.movable=f.resizable=true;p.mce_width=f.width;p.mce_height=f.height;p.mce_inline=true;p.mce_window_id=id;p.mce_auto_focus=f.auto_focus;t.features=f;t.params=p;t.onOpen.dispatch(t,f,p);if(f.type){opt+=' mceModal';if(f.type)opt+=' mce'+f.type.substring(0,1).toUpperCase()+f.type.substring(1);f.resizable=false;}if(f.statusbar)opt+=' mceStatusbar';if(f.resizable)opt+=' mceResizable';if(f.minimizable)opt+=' mceMinimizable';if(f.maximizable)opt+=' mceMaximizable';if(f.movable)opt+=' mceMovable';t._addAll(DOM.doc.body,['div',{id:id,'class':ed.settings.inlinepopups_skin||'clearlooks2',style:'width:100px;height:100px'},['div',{id:id+'_wrapper','class':'mceWrapper'+opt},['div',{id:id+'_top','class':'mceTop'},['div',{'class':'mceLeft'}],['div',{'class':'mceCenter'}],['div',{'class':'mceRight'}],['span',{id:id+'_title'},f.title||'']],['div',{id:id+'_middle','class':'mceMiddle'},['div',{id:id+'_left','class':'mceLeft'}],['span',{id:id+'_content'}],['div',{id:id+'_right','class':'mceRight'}]],['div',{id:id+'_bottom','class':'mceBottom'},['div',{'class':'mceLeft'}],['div',{'class':'mceCenter'}],['div',{'class':'mceRight'}],['span',{id:id+'_status'},'Content']],['a',{'class':'mceMove',tabindex:'-1',href:'javascript:;'}],['a',{'class':'mceMin',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{'class':'mceMax',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{'class':'mceMed',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{'class':'mceClose',tabindex:'-1',href:'javascript:;',onmousedown:'return false;'}],['a',{id:id+'_resize_n','class':'mceResize mceResizeN',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_s','class':'mceResize mceResizeS',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_w','class':'mceResize mceResizeW',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_e','class':'mceResize mceResizeE',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_nw','class':'mceResize mceResizeNW',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_ne','class':'mceResize mceResizeNE',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_sw','class':'mceResize mceResizeSW',tabindex:'-1',href:'javascript:;'}],['a',{id:id+'_resize_se','class':'mceResize mceResizeSE',tabindex:'-1',href:'javascript:;'}]]]);DOM.setStyles(id,{top:-10000,left:-10000});if(tinymce.isGecko)DOM.setStyle(id,'overflow','auto');if(!f.type){dw+=DOM.get(id+'_left').clientWidth;dw+=DOM.get(id+'_right').clientWidth;dh+=DOM.get(id+'_top').clientHeight;dh+=DOM.get(id+'_bottom').clientHeight;}DOM.setStyles(id,{top:f.top,left:f.left,width:f.width+dw,height:f.height+dh});u=f.url||f.file;if(u){if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;u=tinymce._addVer(u);}if(!f.type){DOM.add(id+'_content','iframe',{id:id+'_ifr',src:'javascript:""',frameBorder:0,style:'border:0;width:10px;height:10px'});DOM.setStyles(id+'_ifr',{width:f.width,height:f.height});DOM.setAttrib(id+'_ifr','src',u);}else{DOM.add(id+'_wrapper','a',{id:id+'_ok','class':'mceButton mceOk',href:'javascript:;',onmousedown:'return false;'},'Ok');if(f.type=='confirm')DOM.add(id+'_wrapper','a',{'class':'mceButton mceCancel',href:'javascript:;',onmousedown:'return false;'},'Cancel');DOM.add(id+'_middle','div',{'class':'mceIcon'});DOM.setHTML(id+'_content',f.content.replace('\n','<br />'));}mdf=Event.add(id,'mousedown',function(e){var n=e.target,w,vp;w=t.windows[id];t.focus(id);if(n.nodeName=='A'||n.nodeName=='a'){if(n.className=='mceMax'){w.oldPos=w.element.getXY();w.oldSize=w.element.getSize();vp=DOM.getViewPort();vp.w-=2;vp.h-=2;w.element.moveTo(vp.x,vp.y);w.element.resizeTo(vp.w,vp.h);DOM.setStyles(id+'_ifr',{width:vp.w-w.deltaWidth,height:vp.h-w.deltaHeight});DOM.addClass(id+'_wrapper','mceMaximized');}else if(n.className=='mceMed'){w.element.moveTo(w.oldPos.x,w.oldPos.y);w.element.resizeTo(w.oldSize.w,w.oldSize.h);w.iframeElement.resizeTo(w.oldSize.w-w.deltaWidth,w.oldSize.h-w.deltaHeight);DOM.removeClass(id+'_wrapper','mceMaximized');}else if(n.className=='mceMove')return t._startDrag(id,e,n.className);else if(DOM.hasClass(n,'mceResize'))return t._startDrag(id,e,n.className.substring(13));}});clf=Event.add(id,'click',function(e){var n=e.target;t.focus(id);if(n.nodeName=='A'||n.nodeName=='a'){switch(n.className){case'mceClose':t.close(null,id);return Event.cancel(e);case'mceButton mceOk':case'mceButton mceCancel':f.button_func(n.className=='mceButton mceOk');return Event.cancel(e);}}});w=t.windows[id]={id:id,mousedown_func:mdf,click_func:clf,element:new Element(id,{blocker:1,container:ed.getContainer()}),iframeElement:new Element(id+'_ifr'),features:f,deltaWidth:dw,deltaHeight:dh};w.iframeElement.on('focus',function(){t.focus(id);});if(t.count==0&&t.editor.getParam('dialog_type','modal')=='modal'){DOM.add(DOM.doc.body,'div',{id:'mceModalBlocker','class':(t.editor.settings.inlinepopups_skin||'clearlooks2')+'_modalBlocker',style:{zIndex:t.zIndex-1}});DOM.show('mceModalBlocker');}else DOM.setStyle('mceModalBlocker','z-index',t.zIndex-1);if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!DOM.boxModel))DOM.setStyles('mceModalBlocker',{position:'absolute',width:vp.w-2,height:vp.h-2});t.focus(id);t._fixIELayout(id,1);if(DOM.get(id+'_ok'))DOM.get(id+'_ok').focus();t.count++;return w;},focus:function(id){var t=this,w;if(w=t.windows[id]){w.zIndex=this.zIndex++;w.element.setStyle('zIndex',w.zIndex);w.element.update();id=id+'_wrapper';DOM.removeClass(t.lastId,'mceFocus');DOM.addClass(id,'mceFocus');t.lastId=id;}},_addAll:function(te,ne){var i,n,t=this,dom=tinymce.DOM;if(is(ne,'string'))te.appendChild(dom.doc.createTextNode(ne));else if(ne.length){te=te.appendChild(dom.create(ne[0],ne[1]));for(i=2;i<ne.length;i++)t._addAll(te,ne[i]);}},_startDrag:function(id,se,ac){var t=this,mu,mm,d=DOM.doc,eb,w=t.windows[id],we=w.element,sp=we.getXY(),p,sz,ph,cp,vp,sx,sy,sex,sey,dx,dy,dw,dh;cp={x:0,y:0};vp=DOM.getViewPort();vp.w-=2;vp.h-=2;sex=se.screenX;sey=se.screenY;dx=dy=dw=dh=0;mu=Event.add(d,'mouseup',function(e){Event.remove(d,'mouseup',mu);Event.remove(d,'mousemove',mm);if(eb)eb.remove();we.moveBy(dx,dy);we.resizeBy(dw,dh);sz=we.getSize();DOM.setStyles(id+'_ifr',{width:sz.w-w.deltaWidth,height:sz.h-w.deltaHeight});t._fixIELayout(id,1);return Event.cancel(e);});if(ac!='Move')startMove();function startMove(){if(eb)return;t._fixIELayout(id,0);DOM.add(d.body,'div',{id:'mceEventBlocker','class':'mceEventBlocker '+(t.editor.settings.inlinepopups_skin||'clearlooks2'),style:{zIndex:t.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!DOM.boxModel))DOM.setStyles('mceEventBlocker',{position:'absolute',width:vp.w-2,height:vp.h-2});eb=new Element('mceEventBlocker');eb.update();p=we.getXY();sz=we.getSize();sx=cp.x+p.x-vp.x;sy=cp.y+p.y-vp.y;DOM.add(eb.get(),'div',{id:'mcePlaceHolder','class':'mcePlaceHolder',style:{left:sx,top:sy,width:sz.w,height:sz.h}});ph=new Element('mcePlaceHolder');};mm=Event.add(d,'mousemove',function(e){var x,y,v;startMove();x=e.screenX-sex;y=e.screenY-sey;switch(ac){case'ResizeW':dx=x;dw=0-x;break;case'ResizeE':dw=x;break;case'ResizeN':case'ResizeNW':case'ResizeNE':if(ac=="ResizeNW"){dx=x;dw=0-x;}else if(ac=="ResizeNE")dw=x;dy=y;dh=0-y;break;case'ResizeS':case'ResizeSW':case'ResizeSE':if(ac=="ResizeSW"){dx=x;dw=0-x;}else if(ac=="ResizeSE")dw=x;dh=y;break;case'mceMove':dx=x;dy=y;break;}if(dw<(v=w.features.min_width-sz.w)){if(dx!==0)dx+=dw-v;dw=v;}if(dh<(v=w.features.min_height-sz.h)){if(dy!==0)dy+=dh-v;dh=v;}dw=Math.min(dw,w.features.max_width-sz.w);dh=Math.min(dh,w.features.max_height-sz.h);dx=Math.max(dx,vp.x-(sx+vp.x));dy=Math.max(dy,vp.y-(sy+vp.y));dx=Math.min(dx,(vp.w+vp.x)-(sx+sz.w+vp.x));dy=Math.min(dy,(vp.h+vp.y)-(sy+sz.h+vp.y));if(dx+dy!==0){if(sx+dx<0)dx=0;if(sy+dy<0)dy=0;ph.moveTo(sx+dx,sy+dy);}if(dw+dh!==0)ph.resizeTo(sz.w+dw,sz.h+dh);return Event.cancel(e);});return Event.cancel(se);},resizeBy:function(dw,dh,id){var w=this.windows[id];if(w){w.element.resizeBy(dw,dh);w.iframeElement.resizeBy(dw,dh);}},close:function(win,id){var t=this,w,d=DOM.doc,ix=0,fw,id;id=t._findId(id||win);if(!t.windows[id]){t.parent(win);return;}t.count--;if(t.count==0)DOM.remove('mceModalBlocker');if(w=t.windows[id]){t.onClose.dispatch(t);Event.remove(d,'mousedown',w.mousedownFunc);Event.remove(d,'click',w.clickFunc);Event.clear(id);Event.clear(id+'_ifr');DOM.setAttrib(id+'_ifr','src','javascript:""');w.element.remove();delete t.windows[id];each(t.windows,function(w){if(w.zIndex>ix){fw=w;ix=w.zIndex;}});if(fw)t.focus(fw.id);}},setTitle:function(w,ti){var e;w=this._findId(w);if(e=DOM.get(w+'_title'))e.innerHTML=DOM.encode(ti);},alert:function(txt,cb,s){var t=this,w;w=t.open({title:t,type:'alert',button_func:function(s){if(cb)cb.call(s||t,s);t.close(null,w.id);},content:DOM.encode(t.editor.getLang(txt,txt)),inline:1,width:400,height:130});},confirm:function(txt,cb,s){var t=this,w;w=t.open({title:t,type:'confirm',button_func:function(s){if(cb)cb.call(s||t,s);t.close(null,w.id);},content:DOM.encode(t.editor.getLang(txt,txt)),inline:1,width:400,height:130});},_findId:function(w){var t=this;if(typeof(w)=='string')return w;each(t.windows,function(wo){var ifr=DOM.get(wo.id+'_ifr');if(ifr&&w==ifr.contentWindow){w=wo.id;return false;}});return w;},_fixIELayout:function(id,s){var w,img;if(!tinymce.isIE6)return;each(['n','s','w','e','nw','ne','sw','se'],function(v){var e=DOM.get(id+'_resize_'+v);DOM.setStyles(e,{width:s?e.clientWidth:'',height:s?e.clientHeight:'',cursor:DOM.getStyle(e,'cursor',1)});DOM.setStyle(id+"_bottom",'bottom','-1px');e=0;});if(w=this.windows[id]){w.element.hide();w.element.show();each(DOM.select('div,a',id),function(e,i){if(e.currentStyle.backgroundImage!='none'){img=new Image();img.src=e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,'$1');}});DOM.get(id).style.filter='';}}});tinymce.PluginManager.add('inlinepopups',tinymce.plugins.InlinePopups);})(); \ No newline at end of file (function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":q.settings.inlinepopups_skin||"clearlooks2",style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",r.content.replace("\n","<br />"))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(j,l){var h=this,g,k=d.doc,f=0,i,l;l=h._findId(l||j);if(!h.windows[l]){h.parent(j);return}h.count--;if(h.count==0){d.remove("mceModalBlocker")}if(g=h.windows[l]){h.onClose.dispatch(h);a.remove(k,"mousedown",g.mousedownFunc);a.remove(k,"click",g.clickFunc);a.clear(l);a.clear(l+"_ifr");d.setAttrib(l+"_ifr","src",'javascript:""');g.element.remove();delete h.windows[l];e(h.windows,function(m){if(m.zIndex>f){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
index 027a23c..fffca5a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/editor_plugin_src.js
@@ -1,5 +1,5 @@
1/** 1/**
2 * $Id: editor_plugin_src.js 961 2008-11-14 10:31:07Z spocke $ 2 * $Id: editor_plugin_src.js 1150 2009-06-01 11:50:46Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
@@ -50,7 +50,7 @@
50 50
51 // Only store selection if the type is a normal window 51 // Only store selection if the type is a normal window
52 if (!f.type) 52 if (!f.type)
53 t.bookmark = ed.selection.getBookmark('simple'); 53 t.bookmark = ed.selection.getBookmark(1);
54 54
55 id = DOM.uniqueId(); 55 id = DOM.uniqueId();
56 vp = DOM.getViewPort(); 56 vp = DOM.getViewPort();
@@ -266,7 +266,7 @@
266 DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1); 266 DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);
267 267
268 if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel)) 268 if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))
269 DOM.setStyles('mceModalBlocker', {position : 'absolute', width : vp.w - 2, height : vp.h - 2}); 269 DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});
270 270
271 t.focus(id); 271 t.focus(id);
272 t._fixIELayout(id, 1); 272 t._fixIELayout(id, 1);
@@ -358,7 +358,7 @@
358 }); 358 });
359 359
360 if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel)) 360 if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))
361 DOM.setStyles('mceEventBlocker', {position : 'absolute', width : vp.w - 2, height : vp.h - 2}); 361 DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});
362 362
363 eb = new Element('mceEventBlocker'); 363 eb = new Element('mceEventBlocker');
364 eb.update(); 364 eb.update();
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
index 94abd08..94abd08 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
index e671094..e671094 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/button.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
index 6baf64a..6baf64a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
index 497307a..497307a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
index c894b2e..c894b2e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
index c2a2ad4..c2a2ad4 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
index 43a735f..43a735f 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
index 5e6fd7d..5e6fd7d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/skins/clearlooks2/window.css
diff --git a/public/javascripts/tiny_mce/plugins/inlinepopups/template.htm b/public/javascripts/tiny_mce/plugins/inlinepopups/template.htm
index f9ec642..f9ec642 100755..100644
--- a/public/javascripts/tiny_mce/plugins/inlinepopups/template.htm
+++ b/public/javascripts/tiny_mce/plugins/inlinepopups/template.htm
diff --git a/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js b/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
index 34d4cec..938ce6b 100755..100644
--- a/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.InsertDateTime',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceInsertDate',function(){var str=t._getDateTime(new Date(),ed.getParam("plugin_insertdate_dateFormat",ed.getLang('insertdatetime.date_fmt')));ed.execCommand('mceInsertContent',false,str);});ed.addCommand('mceInsertTime',function(){var str=t._getDateTime(new Date(),ed.getParam("plugin_insertdate_timeFormat",ed.getLang('insertdatetime.time_fmt')));ed.execCommand('mceInsertContent',false,str);});ed.addButton('insertdate',{title:'insertdatetime.insertdate_desc',cmd:'mceInsertDate'});ed.addButton('inserttime',{title:'insertdatetime.inserttime_desc',cmd:'mceInsertTime'});},getInfo:function(){return{longname:'Insert date/time',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_getDateTime:function(d,fmt){var ed=this.editor;function addZeros(value,len){value=""+value;if(value.length<len){for(var i=0;i<(len-value.length);i++)value="0"+value;}return value;};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("%B",""+ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);fmt=fmt.replace("%b",""+ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);fmt=fmt.replace("%A",""+ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);fmt=fmt.replace("%a",""+ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);fmt=fmt.replace("%%","%");return fmt;}});tinymce.PluginManager.add('insertdatetime',tinymce.plugins.InsertDateTime);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
index 9ab3135..9ab3135 100755..100644
--- a/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/insertdatetime/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/layer/editor_plugin.js b/public/javascripts/tiny_mce/plugins/layer/editor_plugin.js
index 4cd9427..f88a6dd 100755..100644
--- a/public/javascripts/tiny_mce/plugins/layer/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/layer/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.Layer',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceInsertLayer',t._insertLayer,t);ed.addCommand('mceMoveForward',function(){t._move(1);});ed.addCommand('mceMoveBackward',function(){t._move(-1);});ed.addCommand('mceMakeAbsolute',function(){t._toggleAbsolute();});ed.addButton('moveforward',{title:'layer.forward_desc',cmd:'mceMoveForward'});ed.addButton('movebackward',{title:'layer.backward_desc',cmd:'mceMoveBackward'});ed.addButton('absolute',{title:'layer.absolute_desc',cmd:'mceMakeAbsolute'});ed.addButton('insertlayer',{title:'layer.insertlayer_desc',cmd:'mceInsertLayer'});ed.onInit.add(function(){if(tinymce.isIE)ed.getDoc().execCommand('2D-Position',false,true);});ed.onNodeChange.add(t._nodeChange,t);ed.onVisualAid.add(t._visualAid,t);},getInfo:function(){return{longname:'Layer',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var le,p;le=this._getParentLayer(n);p=ed.dom.getParent(n,'DIV,P,IMG');if(!p){cm.setDisabled('absolute',1);cm.setDisabled('moveforward',1);cm.setDisabled('movebackward',1);}else{cm.setDisabled('absolute',0);cm.setDisabled('moveforward',!le);cm.setDisabled('movebackward',!le);cm.setActive('absolute',le&&le.style.position.toLowerCase()=="absolute");}},_visualAid:function(ed,e,s){var dom=ed.dom;tinymce.each(dom.select('div,p',e),function(e){if(/^(absolute|relative|static)$/i.test(e.style.position)){if(s)dom.addClass(e,'mceItemVisualAid');else dom.removeClass(e,'mceItemVisualAid');}});},_move:function(d){var ed=this.editor,i,z=[],le=this._getParentLayer(ed.selection.getNode()),ci=-1,fi=-1,nl;nl=[];tinymce.walk(ed.getBody(),function(n){if(n.nodeType==1&&/^(absolute|relative|static)$/i.test(n.style.position))nl.push(n);},'childNodes');for(i=0;i<nl.length;i++){z[i]=nl[i].style.zIndex?parseInt(nl[i].style.zIndex):0;if(ci<0&&nl[i]==le)ci=i;}if(d<0){for(i=0;i<z.length;i++){if(z[i]<z[ci]){fi=i;break;}}if(fi>-1){nl[ci].style.zIndex=z[fi];nl[fi].style.zIndex=z[ci];}else{if(z[ci]>0)nl[ci].style.zIndex=z[ci]-1;}}else{for(i=0;i<z.length;i++){if(z[i]>z[ci]){fi=i;break;}}if(fi>-1){nl[ci].style.zIndex=z[fi];nl[fi].style.zIndex=z[ci];}else nl[ci].style.zIndex=z[ci]+1;}ed.execCommand('mceRepaint');},_getParentLayer:function(n){return this.editor.dom.getParent(n,function(n){return n.nodeType==1&&/^(absolute|relative|static)$/i.test(n.style.position);});},_insertLayer:function(){var ed=this.editor,p=ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(),'*'));ed.dom.add(ed.getBody(),'div',{style:{position:'absolute',left:p.x,top:(p.y>20?p.y:20),width:100,height:100},'class':'mceItemVisualAid'},ed.selection.getContent()||ed.getLang('layer.content'));},_toggleAbsolute:function(){var ed=this.editor,le=this._getParentLayer(ed.selection.getNode());if(!le)le=ed.dom.getParent(ed.selection.getNode(),'DIV,P,IMG');if(le){if(le.style.position.toLowerCase()=="absolute"){ed.dom.setStyles(le,{position:'',left:'',top:'',width:'',height:''});ed.dom.removeClass(le,'mceItemVisualAid');}else{if(le.style.left=="")le.style.left=20+'px';if(le.style.top=="")le.style.top=20+'px';if(le.style.width=="")le.style.width=le.width?(le.width+'px'):'100px';if(le.style.height=="")le.style.height=le.height?(le.height+'px'):'100px';le.style.position="absolute";ed.addVisual(ed.getBody());}ed.execCommand('mceRepaint');ed.nodeChanged();}}});tinymce.PluginManager.add('layer',tinymce.plugins.Layer);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.Layer",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertLayer",c._insertLayer,c);a.addCommand("mceMoveForward",function(){c._move(1)});a.addCommand("mceMoveBackward",function(){c._move(-1)});a.addCommand("mceMakeAbsolute",function(){c._toggleAbsolute()});a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});a.onInit.add(function(){if(tinymce.isIE){a.getDoc().execCommand("2D-Position",false,true)}});a.onNodeChange.add(c._nodeChange,c);a.onVisualAid.add(c._visualAid,c)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var c,d;c=this._getParentLayer(e);d=b.dom.getParent(e,"DIV,P,IMG");if(!d){a.setDisabled("absolute",1);a.setDisabled("moveforward",1);a.setDisabled("movebackward",1)}else{a.setDisabled("absolute",0);a.setDisabled("moveforward",!c);a.setDisabled("movebackward",!c);a.setActive("absolute",c&&c.style.position.toLowerCase()=="absolute")}},_visualAid:function(a,c,b){var d=a.dom;tinymce.each(d.select("div,p",c),function(f){if(/^(absolute|relative|static)$/i.test(f.style.position)){if(b){d.addClass(f,"mceItemVisualAid")}else{d.removeClass(f,"mceItemVisualAid")}}})},_move:function(h){var b=this.editor,f,g=[],e=this._getParentLayer(b.selection.getNode()),c=-1,j=-1,a;a=[];tinymce.walk(b.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){a.push(d)}},"childNodes");for(f=0;f<a.length;f++){g[f]=a[f].style.zIndex?parseInt(a[f].style.zIndex):0;if(c<0&&a[f]==e){c=f}}if(h<0){for(f=0;f<g.length;f++){if(g[f]<g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;f<g.length;f++){if(g[f]>g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js
index a72f6c3..a72f6c3 100755..100644
--- a/public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/layer/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/media/css/content.css b/public/javascripts/tiny_mce/plugins/media/css/content.css
index 1bf6a75..1bf6a75 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/css/content.css
+++ b/public/javascripts/tiny_mce/plugins/media/css/content.css
diff --git a/public/javascripts/tiny_mce/plugins/media/css/media.css b/public/javascripts/tiny_mce/plugins/media/css/media.css
index 2d08794..2d08794 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/css/media.css
+++ b/public/javascripts/tiny_mce/plugins/media/css/media.css
diff --git a/public/javascripts/tiny_mce/plugins/media/editor_plugin.js b/public/javascripts/tiny_mce/plugins/media/editor_plugin.js
index b226b00..951d1e4 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/media/editor_plugin.js
@@ -1 +1 @@
(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.onPreInit.add(function(){ed.serializer.addRules('param[name|value|_mce_value]');});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'};ed.selection.onSetContent.add(function(){t._spansToImgs(ed.getBody());});ed.selection.onBeforeSetContent.add(t._objectsToSpans,t);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(t._objectsToSpans,t);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(/_mce_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};},_objectsToSpans:function(ed,o){var t=this,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="'+t.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></span>');h=h.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');h=h.replace(/<\/(object)([^>]*)>/gi,'</span>');h=h.replace(/<\/embed>/gi,'');h=h.replace(/<param([^>]*)>/gi,function(a,b){return'<span '+b.replace(/value=/gi,'_mce_value=')+' class="mceItemParam"></span>'});h=h.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');o.content=h;},_buildObj:function(o,n){var ob,ed=this.editor,dom=ed.dom,p=this._parse(n.title),stc;stc=ed.getParam('media_strict',true)&&o.type=='application/x-shockwave-flash';p.width=o.width=dom.getAttrib(n,'width')||100;p.height=o.height=dom.getAttrib(n,'height')||100;if(p.src)p.src=ed.convertURL(p.src,'src',n);if(stc){ob=dom.create('span',{mce_name:'object',type:'application/x-shockwave-flash',data:p.src,width:o.width,height:o.height});}else{ob=dom.create('span',{mce_name:'object',classid:"clsid:"+o.classid,codebase:o.codebase,width:o.width,height:o.height});}each(p,function(v,k){if(!/^(width|height|codebase|classid|_cx|_cy)$/.test(k)){if(o.type=='application/x-mplayer2'&&k=='src')k='url';if(v)dom.add(ob,'span',{mce_name:'param',name:k,'_mce_value':v});}});if(!stc)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='',args;args=['id','name','width','height','bgcolor','align','flashvars','src','wmode','allowfullscreen','quality'];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(args,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,'_mce_value');});if(pa.movie){pa.src=pa.movie;delete pa.movie;}n=dom.select('.mceItemEmbed',n)[0];if(n){each(args,function(na){var v=dom.getAttrib(n,na);if(v&&!pa[na])pa[na]=v;});}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);})(); \ No newline at end of file (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/<img[^>]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j='<script type="text/javascript">write'+i.substring(7)+"({"+e._serialize(at)+"});<\/script>"}return j})}})},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}},_objectsToSpans:function(b,e){var c=this,d=e.content;d=d.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(g,f,i){var h=c._parse(i);return'<img class="mceItem'+f+'" title="'+b.dom.encode(i)+'" src="'+c.url+'/img/trans.gif" width="'+h.width+'" height="'+h.height+'" />'});d=d.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');d=d.replace(/<embed([^>]*)\/?>/gi,'<span class="mceItemEmbed" $1></span>');d=d.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');d=d.replace(/<\/(object)([^>]*)>/gi,"</span>");d=d.replace(/<\/embed>/gi,"");d=d.replace(/<param([^>]*)>/gi,function(g,f){return"<span "+f.replace(/value=/gi,"_mce_value=")+' class="mceItemParam"></span>'});d=d.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');e.content=d},_buildObj:function(g,h){var d,c=this.editor,f=c.dom,e=this._parse(h.title),b;b=c.getParam("media_strict",true)&&g.type=="application/x-shockwave-flash";e.width=g.width=f.getAttrib(h,"width")||100;e.height=g.height=f.getAttrib(h,"height")||100;if(e.src){e.src=c.convertURL(e.src,"src",h)}if(b){d=f.create("span",{id:e.id,mce_name:"object",type:"application/x-shockwave-flash",data:e.src,style:f.getAttrib(h,"style"),width:g.width,height:g.height})}else{d=f.create("span",{id:e.id,mce_name:"object",classid:"clsid:"+g.classid,style:f.getAttrib(h,"style"),codebase:g.codebase,width:g.width,height:g.height})}a(e,function(j,i){if(!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(i)){if(g.type=="application/x-mplayer2"&&i=="src"&&!e.url){i="url"}if(j){f.add(d,"span",{mce_name:"param",name:i,_mce_value:j})}}});if(!b){f.add(d,"span",tinymce.extend({mce_name:"embed",type:g.type,style:f.getAttrib(h,"style")},e))}return d},_spansToImgs:function(e){var d=this,f=d.editor.dom,b,c;a(f.select("span",e),function(g){if(f.getAttrib(g,"class")=="mceItemObject"){c=f.getAttrib(g,"classid").toLowerCase().replace(/\s+/g,"");switch(c){case"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000":f.replace(d._createImg("mceItemFlash",g),g);break;case"clsid:166b1bca-3f9c-11cf-8075-444553540000":f.replace(d._createImg("mceItemShockWave",g),g);break;case"clsid:6bf52a52-394a-11d3-b153-00c04f79faa6":case"clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95":case"clsid:05589fa1-c356-11ce-bf01-00aa0055595a":f.replace(d._createImg("mceItemWindowsMedia",g),g);break;case"clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b":f.replace(d._createImg("mceItemQuickTime",g),g);break;case"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa":f.replace(d._createImg("mceItemRealMedia",g),g);break;default:f.replace(d._createImg("mceItemFlash",g),g)}return}if(f.getAttrib(g,"class")=="mceItemEmbed"){switch(f.getAttrib(g,"type")){case"application/x-shockwave-flash":f.replace(d._createImg("mceItemFlash",g),g);break;case"application/x-director":f.replace(d._createImg("mceItemShockWave",g),g);break;case"application/x-mplayer2":f.replace(d._createImg("mceItemWindowsMedia",g),g);break;case"video/quicktime":f.replace(d._createImg("mceItemQuickTime",g),g);break;case"audio/x-pn-realaudio-plugin":f.replace(d._createImg("mceItemRealMedia",g),g);break;default:f.replace(d._createImg("mceItemFlash",g),g)}}})},_createImg:function(c,h){var b,g=this.editor.dom,f={},e="",d;d=["id","name","width","height","bgcolor","align","flashvars","src","wmode","allowfullscreen","quality"];b=g.create("img",{src:this.url+"/img/trans.gif",width:g.getAttrib(h,"width")||100,height:g.getAttrib(h,"height")||100,style:g.getAttrib(h,"style"),"class":c});a(d,function(i){var j=g.getAttrib(h,i);if(j){f[i]=j}});a(g.select("span",h),function(i){if(g.hasClass(i,"mceItemParam")){f[g.getAttrib(i,"name")]=g.getAttrib(i,"_mce_value")}});if(f.movie){f.src=f.movie;delete f.movie}h=g.select(".mceItemEmbed",h)[0];if(h){a(d,function(i){var j=g.getAttrib(h,i);if(j&&!f[i]){f[i]=j}})}delete f.width;delete f.height;b.title=this._serialize(f);return b},_parse:function(b){return tinymce.util.JSON.parse("{"+b+"}")},_serialize:function(b){return tinymce.util.JSON.serialize(b).replace(/[{}]/g,"")}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js
index beec3bf..faa0cf7 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/media/editor_plugin_src.js
@@ -1,5 +1,5 @@
1/** 1/**
2 * $Id: editor_plugin_src.js 952 2008-11-03 17:56:04Z spocke $ 2 * $Id: editor_plugin_src.js 1037 2009-03-02 16:41:15Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
@@ -165,14 +165,14 @@
165 o.content = o.content.replace(/_mce_value=/g, 'value='); 165 o.content = o.content.replace(/_mce_value=/g, 'value=');
166 }); 166 });
167 167
168 if (ed.getParam('media_use_script')) { 168 function getAttr(s, n) {
169 function getAttr(s, n) { 169 n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
170 n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);
171 170
172 return n ? ed.dom.decode(n[1]) : ''; 171 return n ? ed.dom.decode(n[1]) : '';
173 }; 172 };
174 173
175 ed.onPostProcess.add(function(ed, o) { 174 ed.onPostProcess.add(function(ed, o) {
175 if (ed.getParam('media_use_script')) {
176 o.content = o.content.replace(/<img[^>]+>/g, function(im) { 176 o.content = o.content.replace(/<img[^>]+>/g, function(im) {
177 var cl = getAttr(im, 'class'); 177 var cl = getAttr(im, 'class');
178 178
@@ -185,8 +185,8 @@
185 185
186 return im; 186 return im;
187 }); 187 });
188 }); 188 }
189 } 189 });
190 }, 190 },
191 191
192 getInfo : function() { 192 getInfo : function() {
@@ -233,16 +233,20 @@
233 233
234 if (stc) { 234 if (stc) {
235 ob = dom.create('span', { 235 ob = dom.create('span', {
236 id : p.id,
236 mce_name : 'object', 237 mce_name : 'object',
237 type : 'application/x-shockwave-flash', 238 type : 'application/x-shockwave-flash',
238 data : p.src, 239 data : p.src,
240 style : dom.getAttrib(n, 'style'),
239 width : o.width, 241 width : o.width,
240 height : o.height 242 height : o.height
241 }); 243 });
242 } else { 244 } else {
243 ob = dom.create('span', { 245 ob = dom.create('span', {
246 id : p.id,
244 mce_name : 'object', 247 mce_name : 'object',
245 classid : "clsid:" + o.classid, 248 classid : "clsid:" + o.classid,
249 style : dom.getAttrib(n, 'style'),
246 codebase : o.codebase, 250 codebase : o.codebase,
247 width : o.width, 251 width : o.width,
248 height : o.height 252 height : o.height
@@ -250,9 +254,9 @@
250 } 254 }
251 255
252 each (p, function(v, k) { 256 each (p, function(v, k) {
253 if (!/^(width|height|codebase|classid|_cx|_cy)$/.test(k)) { 257 if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) {
254 // Use url instead of src in IE for Windows media 258 // Use url instead of src in IE for Windows media
255 if (o.type == 'application/x-mplayer2' && k == 'src') 259 if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url)
256 k = 'url'; 260 k = 'url';
257 261
258 if (v) 262 if (v)
@@ -261,7 +265,7 @@
261 }); 265 });
262 266
263 if (!stc) 267 if (!stc)
264 dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type}, p)); 268 dom.add(ob, 'span', tinymce.extend({mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p));
265 269
266 return ob; 270 return ob;
267 }, 271 },
@@ -344,6 +348,7 @@
344 src : this.url + '/img/trans.gif', 348 src : this.url + '/img/trans.gif',
345 width : dom.getAttrib(n, 'width') || 100, 349 width : dom.getAttrib(n, 'width') || 100,
346 height : dom.getAttrib(n, 'height') || 100, 350 height : dom.getAttrib(n, 'height') || 100,
351 style : dom.getAttrib(n, 'style'),
347 'class' : cl 352 'class' : cl
348 }); 353 });
349 354
diff --git a/public/javascripts/tiny_mce/plugins/media/img/flash.gif b/public/javascripts/tiny_mce/plugins/media/img/flash.gif
index cb192e6..cb192e6 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/flash.gif
+++ b/public/javascripts/tiny_mce/plugins/media/img/flash.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/img/flv_player.swf b/public/javascripts/tiny_mce/plugins/media/img/flv_player.swf
index 042c2ab..042c2ab 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/flv_player.swf
+++ b/public/javascripts/tiny_mce/plugins/media/img/flv_player.swf
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/img/quicktime.gif b/public/javascripts/tiny_mce/plugins/media/img/quicktime.gif
index 3b04991..3b04991 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/quicktime.gif
+++ b/public/javascripts/tiny_mce/plugins/media/img/quicktime.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/img/realmedia.gif b/public/javascripts/tiny_mce/plugins/media/img/realmedia.gif
index fdfe0b9..fdfe0b9 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/realmedia.gif
+++ b/public/javascripts/tiny_mce/plugins/media/img/realmedia.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/img/shockwave.gif b/public/javascripts/tiny_mce/plugins/media/img/shockwave.gif
index 5f235df..5f235df 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/shockwave.gif
+++ b/public/javascripts/tiny_mce/plugins/media/img/shockwave.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/img/trans.gif b/public/javascripts/tiny_mce/plugins/media/img/trans.gif
index 3884865..3884865 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/trans.gif
+++ b/public/javascripts/tiny_mce/plugins/media/img/trans.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gif b/public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gif
index ab50f2d..ab50f2d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gif
+++ b/public/javascripts/tiny_mce/plugins/media/img/windowsmedia.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/media/js/embed.js b/public/javascripts/tiny_mce/plugins/media/js/embed.js
index f8dc810..f8dc810 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/js/embed.js
+++ b/public/javascripts/tiny_mce/plugins/media/js/embed.js
diff --git a/public/javascripts/tiny_mce/plugins/media/js/media.js b/public/javascripts/tiny_mce/plugins/media/js/media.js
index fa8e142..86cfa98 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/js/media.js
+++ b/public/javascripts/tiny_mce/plugins/media/js/media.js
@@ -218,7 +218,7 @@ function insertMedia() {
218 break; 218 break;
219 } 219 }
220 220
221 if (fe.width != f.width.value || fe.height != f.height.height) 221 if (fe.width != f.width.value || fe.height != f.height.value)
222 ed.execCommand('mceRepaint'); 222 ed.execCommand('mceRepaint');
223 223
224 fe.title = serializeParameters(); 224 fe.title = serializeParameters();
@@ -469,7 +469,7 @@ function setBool(pl, p, n) {
469 if (typeof(pl[n]) == "undefined") 469 if (typeof(pl[n]) == "undefined")
470 return; 470 return;
471 471
472 document.forms[0].elements[p + "_" + n].checked = pl[n]; 472 document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false';
473} 473}
474 474
475function setStr(pl, p, n) { 475function setStr(pl, p, n) {
@@ -490,7 +490,7 @@ function getBool(p, n, d, tv, fv) {
490 tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'"; 490 tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";
491 fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'"; 491 fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";
492 492
493 return (v == d) ? '' : n + (v ? ':' + tv + ',' : ':' + fv + ','); 493 return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',");
494} 494}
495 495
496function getStr(p, n, d) { 496function getStr(p, n, d) {
diff --git a/public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js
index 6d0a996..6d0a996 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/media/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/media/media.htm b/public/javascripts/tiny_mce/plugins/media/media.htm
index 8b3bc1d..911c03d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/media/media.htm
+++ b/public/javascripts/tiny_mce/plugins/media/media.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="../../utils/form_utils.js"></script> 9 <script type="text/javascript" src="../../utils/form_utils.js"></script>
10 <script type="text/javascript" src="../../utils/editable_selects.js"></script> 10 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
11 <link href="css/media.css" rel="stylesheet" type="text/css" /> 11 <link href="css/media.css" rel="stylesheet" type="text/css" />
12 <base target="_self" />
13</head> 12</head>
14<body style="display: none"> 13<body style="display: none">
15 <form onsubmit="insertMedia();return false;" action="#"> 14 <form onsubmit="insertMedia();return false;" action="#">
@@ -52,7 +51,7 @@
52 </tr> 51 </tr>
53 <tr id="linklistrow"> 52 <tr id="linklistrow">
54 <td><label for="linklist">{#media_dlg.list}</label></td> 53 <td><label for="linklist">{#media_dlg.list}</label></td>
55 <td id="linklistcontainer">&nbsp;</td> 54 <td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>
56 </tr> 55 </tr>
57 <tr> 56 <tr>
58 <td><label for="width">{#media_dlg.size}</label></td> 57 <td><label for="width">{#media_dlg.size}</label></td>
@@ -260,8 +259,7 @@
260 <td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td> 259 <td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>
261 <td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td> 260 <td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>
262 261
263 <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td> 262
264 <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>
265 </tr> 263 </tr>
266 264
267 <tr> 265 <tr>
diff --git a/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js b/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
index 4fce503..f2dbbff 100755..100644
--- a/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin.js
@@ -1 +1 @@
(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);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span class="mceItemHidden mceVisualNbsp">&middot;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},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)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
index b723756..b723756 100755..100644
--- a/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/nonbreaking/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js b/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js
index 8a1b8f0..9945cd8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin.js
@@ -1 +1 @@
(function(){var Event=tinymce.dom.Event;tinymce.create('tinymce.plugins.NonEditablePlugin',{init:function(ed,url){var t=this,editClass,nonEditClass;t.editor=ed;editClass=ed.getParam("noneditable_editable_class","mceEditable");nonEditClass=ed.getParam("noneditable_noneditable_class","mceNonEditable");ed.onNodeChange.addToTop(function(ed,cm,n){var sc,ec;sc=ed.dom.getParent(ed.selection.getStart(),function(n){return ed.dom.hasClass(n,nonEditClass);});ec=ed.dom.getParent(ed.selection.getEnd(),function(n){return ed.dom.hasClass(n,nonEditClass);});if(sc||ec){t._setDisabled(1);return false;}else t._setDisabled(0);});},getInfo:function(){return{longname:'Non editable elements',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_block:function(ed,e){var k=e.keyCode;if((k>32&&k<41)||(k>111&&k<124))return;return Event.cancel(e);},_setDisabled:function(s){var t=this,ed=t.editor;tinymce.each(ed.controlManager.controls,function(c){c.setDisabled(s);});if(s!==t.disabled){if(s){ed.onKeyDown.addToTop(t._block);ed.onKeyPress.addToTop(t._block);ed.onKeyUp.addToTop(t._block);ed.onPaste.addToTop(t._block);}else{ed.onKeyDown.remove(t._block);ed.onKeyPress.remove(t._block);ed.onKeyUp.remove(t._block);ed.onPaste.remove(t._block);}t.disabled=s;}}});tinymce.PluginManager.add('noneditable',tinymce.plugins.NonEditablePlugin);})(); \ No newline at end of file (function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
index 77db577..77db577 100755..100644
--- a/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/noneditable/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/pagebreak/css/content.css b/public/javascripts/tiny_mce/plugins/pagebreak/css/content.css
index c949d58..c949d58 100755..100644
--- a/public/javascripts/tiny_mce/plugins/pagebreak/css/content.css
+++ b/public/javascripts/tiny_mce/plugins/pagebreak/css/content.css
diff --git a/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js b/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js
index 177ea95..a212f69 100755..100644
--- a/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.PageBreakPlugin',{init:function(ed,url){var pb='<img src="'+url+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',cls='mcePageBreak',sep=ed.getParam('pagebreak_separator','<!-- pagebreak -->'),pbRE;pbRE=new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(a){return'\\'+a;}),'g');ed.addCommand('mcePageBreak',function(){ed.execCommand('mceInsertContent',0,pb);});ed.addButton('pagebreak',{title:'pagebreak.desc',cmd:cls});ed.onInit.add(function(){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.node.nodeName=='IMG'&&ed.dom.hasClass(o.node,cls))o.name='pagebreak';});}});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName==='IMG'&&ed.dom.hasClass(e,cls))ed.selection.select(e);});ed.onNodeChange.add(function(ed,cm,n){cm.setActive('pagebreak',n.nodeName==='IMG'&&ed.dom.hasClass(n,cls));});ed.onBeforeSetContent.add(function(ed,o){o.content=o.content.replace(pbRE,pb);});ed.onPostProcess.add(function(ed,o){if(o.get)o.content=o.content.replace(/<img[^>]+>/g,function(im){if(im.indexOf('class="mcePageBreak')!==-1)im=sep;return im;});});},getInfo:function(){return{longname:'PageBreak',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('pagebreak',tinymce.plugins.PageBreakPlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+d+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
index 16f5748..16f5748 100755..100644
--- a/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/pagebreak/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif b/public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif
index acdf408..acdf408 100755..100644
--- a/public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif
+++ b/public/javascripts/tiny_mce/plugins/pagebreak/img/pagebreak.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gif b/public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gif
index 3884865..3884865 100755..100644
--- a/public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gif
+++ b/public/javascripts/tiny_mce/plugins/pagebreak/img/trans.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/paste/blank.htm b/public/javascripts/tiny_mce/plugins/paste/blank.htm
deleted file mode 100755
index 7ba26bd..0000000
--- a/public/javascripts/tiny_mce/plugins/paste/blank.htm
+++ /dev/null
@@ -1,22 +0,0 @@
1<html xmlns="http://www.w3.org/1999/xhtml">
2<head>
3<title>blank_page</title>
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5<link href="css/blank.css" rel="stylesheet" type="text/css" />
6<base target="_self" />
7<script type="text/javascript">
8function init() {
9 if (parent.tinymce.isIE)
10 document.body.contentEditable = true;
11 else
12 document.designMode = 'on';
13
14 parent.initIframe(document);
15 window.focus();
16}
17</script>
18</head>
19<body onload="init();">
20
21</body>
22</html>
diff --git a/public/javascripts/tiny_mce/plugins/paste/css/blank.css b/public/javascripts/tiny_mce/plugins/paste/css/blank.css
deleted file mode 100755
index 6b16bac..0000000
--- a/public/javascripts/tiny_mce/plugins/paste/css/blank.css
+++ /dev/null
@@ -1,14 +0,0 @@
1html, body {height:98%}
2body {
3background-color: #FFFFFF;
4font-family: Verdana, Arial, Helvetica, sans-serif;
5font-size: 10px;
6scrollbar-3dlight-color: #F0F0EE;
7scrollbar-arrow-color: #676662;
8scrollbar-base-color: #F0F0EE;
9scrollbar-darkshadow-color: #DDDDDD;
10scrollbar-face-color: #E0E0DD;
11scrollbar-highlight-color: #F0F0EE;
12scrollbar-shadow-color: #F0F0EE;
13scrollbar-track-color: #F5F5F5;
14}
diff --git a/public/javascripts/tiny_mce/plugins/paste/css/pasteword.css b/public/javascripts/tiny_mce/plugins/paste/css/pasteword.css
deleted file mode 100755
index b3be627..0000000
--- a/public/javascripts/tiny_mce/plugins/paste/css/pasteword.css
+++ /dev/null
@@ -1,3 +0,0 @@
1.sourceIframe {
2 border: 1px solid #808080;
3}
diff --git a/public/javascripts/tiny_mce/plugins/paste/editor_plugin.js b/public/javascripts/tiny_mce/plugins/paste/editor_plugin.js
index eeeebd5..473bb85 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/paste/editor_plugin.js
@@ -1 +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){content=this.editor.dom.encode(content);if(content&&content.length>0){if(!this.editor.selection.isCollapsed())this.editor.execCommand("Delete");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,...,\x93|\x94|\u201c|\u201d,",\x60|\x91|\x92|\u2018|\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(/<!--([\s\S]*?)-->|<style>[\s\S]*?<\/style>/g,"");content=content.replace(/<(meta|link)[^>]+>/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);})(); \ No newline at end of file (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.PastePlugin",{init:function(c,d){var e=this,b;e.editor=c;e.url=d;e.onPreProcess=new tinymce.util.Dispatcher(e);e.onPostProcess=new tinymce.util.Dispatcher(e);e.onPreProcess.add(e._preProcess);e.onPostProcess.add(e._postProcess);e.onPreProcess.add(function(h,i){c.execCallback("paste_preprocess",h,i)});e.onPostProcess.add(function(h,i){c.execCallback("paste_postprocess",h,i)});function g(i){var h=c.dom;e.onPreProcess.dispatch(e,i);i.node=h.create("div",0,i.content);e.onPostProcess.dispatch(e,i);i.content=c.serializer.serialize(i.node,{getInner:1});if(/<(p|h[1-6]|ul|ol)/.test(i.content)){e._insertBlockContent(c,h,i.content)}else{e._insert(i.content)}}c.addCommand("mceInsertClipboardContent",function(h,i){g(i)});function f(l){var p,k,i,j=c.selection,o=c.dom,h=c.getBody(),m;if(o.get("_mcePaste")){return}p=o.add(h,"div",{id:"_mcePaste"},"&nbsp;");if(h!=c.getDoc().body){m=o.getPos(c.selection.getStart(),h).y}else{m=h.scrollTop}o.setStyles(p,{position:"absolute",left:-10000,top:m,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){i=o.doc.body.createTextRange();i.moveToElementText(p);i.execCommand("Paste");o.remove(p);if(p.innerHTML==="&nbsp;"){return}g({content:p.innerHTML});return tinymce.dom.Event.cancel(l)}else{k=c.selection.getRng();p=p.firstChild;i=c.getDoc().createRange();i.setStart(p,0);i.setEnd(p,1);j.setRng(i);window.setTimeout(function(){var n="";a(o.select("div[id=_mcePaste]").reverse(),function(q){n+=(o.select("> span.Apple-style-span div",q)[0]||o.select("> span.Apple-style-span",q)[0]||q).innerHTML;o.remove(q)});if(k){j.setRng(k)}g({content:n})},0)}}if(c.getParam("paste_auto_cleanup_on_paste",true)){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){c.onKeyDown.add(function(h,i){if(((tinymce.isMac?i.metaKey:i.ctrlKey)&&i.keyCode==86)||(i.shiftKey&&i.keyCode==45)){f(i)}})}else{c.onPaste.addToTop(function(h,i){return f(i)})}}if(c.getParam("paste_block_drop")){c.onInit.add(function(){c.dom.bind(c.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(h){h.preventDefault();h.stopPropagation();return false})})}e._legacySupport()},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}},_preProcess:function(d,g){var b=this.editor,c=g.content,f,e;function f(h){a(h,function(i){if(i.constructor==RegExp){c=c.replace(i,"")}else{c=c.replace(i[0],i[1])}})}if(/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(c)||g.wordContent){g.wordContent=true;f([/^\s*(&nbsp;)+/g,/(&nbsp;|<br[^>]*>)+\s*$/g]);if(b.getParam("paste_convert_middot_lists",true)){f([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+:\s*symbol[^>]+>)/gi,"$1__MCE_ITEM__"],[/(<span[^>]+mso-list:[^>]+>)/gi,"$1__MCE_ITEM__"]])}f([/<!--[\s\S]+?-->/gi,/<\/?(img|font|meta|link|style|div|v:\w+)[^>]*>/gi,/<\\?\?xml[^>]*>/gi,/<\/?o:[^>]*>/gi,/ (id|name|language|type|on\w+|v:\w+)=\"([^\"]*)\"/gi,/ (id|name|language|type|on\w+|v:\w+)=(\w+)/gi,[/<(\/?)s>/gi,"<$1strike>"],/<script[^>]+>[\s\S]*?<\/script>/gi,[/&nbsp;/g,"\u00a0"]]);if(!b.getParam("paste_retain_style_properties")){f([/<\/?(span)[^>]*>/gi])}}e=b.getParam("paste_strip_class_attributes","all");if(e!="none"){if(e=="all"){f([/ class=\"([^\"]*)\"/gi,/ class=(\w+)/gi])}else{f([/ class=\"(mso[^\"]*)\"/gi,/ class=(mso\w+)/gi])}}if(b.getParam("paste_remove_spans")){f([/<\/?(span)[^>]*>/gi])}g.content=c},_postProcess:function(e,g){var d=this,c=d.editor,f=c.dom,b;if(g.wordContent){a(f.select("a",g.node),function(h){if(!h.href||h.href.indexOf("#_Toc")!=-1){f.remove(h,1)}});if(d.editor.getParam("paste_convert_middot_lists",true)){d._convertLists(e,g)}b=c.getParam("paste_retain_style_properties");if(tinymce.is(b,"string")){b=tinymce.explode(b)}a(f.select("*",g.node),function(l){var m={},j=0,k,n,h;if(b){for(k=0;k<b.length;k++){n=b[k];h=f.getStyle(l,n);if(h){m[n]=h;j++}}}f.setAttrib(l,"style","");if(b&&j>0){f.setStyles(l,m)}else{if(l.nodeName=="SPAN"&&!l.className){f.remove(l,true)}}})}if(c.getParam("paste_remove_styles")||(c.getParam("paste_remove_styles_if_webkit")&&tinymce.isWebKit)){a(f.select("*[style]",g.node),function(h){h.removeAttribute("style");h.removeAttribute("mce_style")})}else{if(tinymce.isWebKit){a(f.select("*",g.node),function(h){h.removeAttribute("mce_style")})}}},_convertLists:function(e,c){var g=e.editor.dom,f,j,b=-1,d,k=[],i,h;a(g.select("p",c.node),function(r){var n,s="",q,o,l,m;for(n=r.firstChild;n&&n.nodeType==3;n=n.nextSibling){s+=n.nodeValue}s=r.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(s)){q="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(s)){q="ol"}if(q){d=parseFloat(r.style.marginLeft||0);if(d>b){k.push(d)}if(!f||q!=i){f=g.create(q);g.insertAfter(f,r)}else{if(d>b){f=j.appendChild(g.create(q))}else{if(d<b){l=tinymce.inArray(k,d);m=g.getParents(f.parentNode,q);f=m[m.length-1-l]||f}}}a(g.select("span",r),function(t){var p=t.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(q=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){g.remove(t)}else{if(/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){g.remove(t)}}});o=r.innerHTML;if(q=="ul"){o=r.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/,"")}else{o=r.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}j=f.appendChild(g.create("li",0,o));g.remove(r);b=d;i=q}else{f=b=0}});h=c.node.innerHTML;if(h.indexOf("__MCE_ITEM__")!=-1){c.node.innerHTML=h.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(h,e,i){var c,g,d=h.selection,m,j,b,k,f;function l(p){var o;if(tinymce.isIE){o=h.getDoc().body.createTextRange();o.moveToElementText(p);o.collapse(false);o.select()}else{d.select(p,1);d.collapse(false)}}this._insert('<span id="_marker">&nbsp;</span>',1);g=e.get("_marker");c=e.getParent(g,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(c&&!/TD|TH/.test(c.nodeName)){g=e.split(c,g);a(e.create("div",0,i).childNodes,function(o){m=g.parentNode.insertBefore(o.cloneNode(true),g)});l(m)}else{e.setOuterHTML(g,i);d.select(h.getBody(),1);d.collapse(0)}e.remove("_marker");j=d.getStart();b=e.getViewPort(h.getWin());k=h.dom.getPos(j).y;f=j.clientHeight;if(k<b.y||k+f>b.y+b.h){h.getDoc().body.scrollTop=k<b.y?k:k-b.h+25}},_insert:function(d,b){var c=this.editor;if(!c.selection.isCollapsed()){c.getDoc().execCommand("Delete",false,null)}c.execCommand(tinymce.isGecko?"insertHTML":"mceInsertContent",false,d,{skip_undo:b})},_legacySupport:function(){var c=this,b=c.editor;a(["mcePasteText","mcePasteWord"],function(d){b.addCommand(d,function(){b.windowManager.open({file:c.url+(d=="mcePasteText"?"/pastetext.htm":"/pasteword.htm"),width:parseInt(b.getParam("paste_dialog_width","450")),height:parseInt(b.getParam("paste_dialog_height","400")),inline:1})})});b.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});b.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"});b.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js
index bb5f5aa..8641519 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/paste/editor_plugin_src.js
@@ -1,81 +1,172 @@
1/** 1/**
2 * $Id: editor_plugin_src.js 919 2008-09-08 20:31:23Z spocke $ 2 * $Id: editor_plugin_src.js 1199 2009-08-18 11:55:59Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6 */ 6 */
7 7
8(function() { 8(function() {
9 var Event = tinymce.dom.Event; 9 var each = tinymce.each;
10 10
11 tinymce.create('tinymce.plugins.PastePlugin', { 11 tinymce.create('tinymce.plugins.PastePlugin', {
12 init : function(ed, url) { 12 init : function(ed, url) {
13 var t = this; 13 var t = this, cb;
14 14
15 t.editor = ed; 15 t.editor = ed;
16 t.url = url;
16 17
17 // Register commands 18 // Setup plugin events
18 ed.addCommand('mcePasteText', function(ui, v) { 19 t.onPreProcess = new tinymce.util.Dispatcher(t);
19 if (ui) { 20 t.onPostProcess = new tinymce.util.Dispatcher(t);
20 if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) { 21
21 ed.windowManager.open({ 22 // Register default handlers
22 file : url + '/pastetext.htm', 23 t.onPreProcess.add(t._preProcess);
23 width : 450, 24 t.onPostProcess.add(t._postProcess);
24 height : 400, 25
25 inline : 1 26 // Register optional preprocess handler
26 }, { 27 t.onPreProcess.add(function(pl, o) {
27 plugin_url : url 28 ed.execCallback('paste_preprocess', pl, o);
28 });
29 } else
30 t._insertText(clipboardData.getData("Text"), true);
31 } else
32 t._insertText(v.html, v.linebreaks);
33 }); 29 });
34 30
35 ed.addCommand('mcePasteWord', function(ui, v) { 31 // Register optional postprocess
36 if (ui) { 32 t.onPostProcess.add(function(pl, o) {
37 if ((ed.getParam('paste_use_dialog', true)) || (!tinymce.isIE)) { 33 ed.execCallback('paste_postprocess', pl, o);
38 ed.windowManager.open({
39 file : url + '/pasteword.htm',
40 width : 450,
41 height : 400,
42 inline : 1
43 }, {
44 plugin_url : url
45 });
46 } else
47 t._insertText(t._clipboardHTML());
48 } else
49 t._insertWordContent(v);
50 }); 34 });
51 35
52 ed.addCommand('mceSelectAll', function() { 36 // This function executes the process handlers and inserts the contents
53 ed.execCommand('selectall'); 37 function process(o) {
38 var dom = ed.dom;
39
40 // Execute pre process handlers
41 t.onPreProcess.dispatch(t, o);
42
43 // Create DOM structure
44 o.node = dom.create('div', 0, o.content);
45
46 // Execute post process handlers
47 t.onPostProcess.dispatch(t, o);
48
49 // Serialize content
50 o.content = ed.serializer.serialize(o.node, {getInner : 1});
51
52 // Insert cleaned content. We need to handle insertion of contents containing block elements separately
53 if (/<(p|h[1-6]|ul|ol)/.test(o.content))
54 t._insertBlockContent(ed, dom, o.content);
55 else
56 t._insert(o.content);
57 };
58
59 // Add command for external usage
60 ed.addCommand('mceInsertClipboardContent', function(u, o) {
61 process(o);
54 }); 62 });
55 63
56 // Register buttons 64 // This function grabs the contents from the clipboard by adding a
57 ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText', ui : true}); 65 // hidden div and placing the caret inside it and after the browser paste
58 ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord', ui : true}); 66 // is done it grabs that contents and processes that
59 ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'mceSelectAll'}); 67 function grabContent(e) {
68 var n, or, rng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;
69
70 if (dom.get('_mcePaste'))
71 return;
72
73 // Create container to paste into
74 n = dom.add(body, 'div', {id : '_mcePaste'}, '&nbsp;');
60 75
61 if (ed.getParam("paste_auto_cleanup_on_paste", false)) { 76 // If contentEditable mode we need to find out the position of the closest element
62 ed.onPaste.add(function(ed, e) { 77 if (body != ed.getDoc().body)
63 return t._handlePasteEvent(e) 78 posY = dom.getPos(ed.selection.getStart(), body).y;
79 else
80 posY = body.scrollTop;
81
82 // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles
83 dom.setStyles(n, {
84 position : 'absolute',
85 left : -10000,
86 top : posY,
87 width : 1,
88 height : 1,
89 overflow : 'hidden'
64 }); 90 });
91
92 if (tinymce.isIE) {
93 // Select the container
94 rng = dom.doc.body.createTextRange();
95 rng.moveToElementText(n);
96 rng.execCommand('Paste');
97
98 // Remove container
99 dom.remove(n);
100
101 // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due
102 // to IE security settings so we pass the junk though better than nothing right
103 if (n.innerHTML === '&nbsp;')
104 return;
105
106 // Process contents
107 process({content : n.innerHTML});
108
109 // Block the real paste event
110 return tinymce.dom.Event.cancel(e);
111 } else {
112 or = ed.selection.getRng();
113
114 // Move caret into hidden div
115 n = n.firstChild;
116 rng = ed.getDoc().createRange();
117 rng.setStart(n, 0);
118 rng.setEnd(n, 1);
119 sel.setRng(rng);
120
121 // Wait a while and grab the pasted contents
122 window.setTimeout(function() {
123 var h = '';
124
125 // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string
126 each(dom.select('div[id=_mcePaste]').reverse(), function(n) {
127 h += (dom.select('> span.Apple-style-span div', n)[0] || dom.select('> span.Apple-style-span', n)[0] || n).innerHTML;
128 dom.remove(n);
129 });
130
131 // Restore the old selection
132 if (or)
133 sel.setRng(or);
134
135 process({content : h});
136 }, 0);
137 }
138 };
139
140 // Check if we should use the new auto process method
141 if (ed.getParam('paste_auto_cleanup_on_paste', true)) {
142 // Is it's Opera or older FF use key handler
143 if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
144 ed.onKeyDown.add(function(ed, e) {
145 if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
146 grabContent(e);
147 });
148 } else {
149 // Grab contents on paste event on Gecko and WebKit
150 ed.onPaste.addToTop(function(ed, e) {
151 return grabContent(e);
152 });
153 }
65 } 154 }
66 155
67 if (!tinymce.isIE && ed.getParam("paste_auto_cleanup_on_paste", false)) { 156 // Block all drag/drop events
68 // Force paste dialog if non IE browser 157 if (ed.getParam('paste_block_drop')) {
69 ed.onKeyDown.add(function(ed, e) { 158 ed.onInit.add(function() {
70 if (e.ctrlKey && e.keyCode == 86) { 159 ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {
71 window.setTimeout(function() { 160 e.preventDefault();
72 ed.execCommand("mcePasteText", true); 161 e.stopPropagation();
73 }, 1);
74 162
75 Event.cancel(e); 163 return false;
76 } 164 });
77 }); 165 });
78 } 166 }
167
168 // Add legacy support
169 t._legacySupport();
79 }, 170 },
80 171
81 getInfo : function() { 172 getInfo : function() {
@@ -88,304 +179,331 @@
88 }; 179 };
89 }, 180 },
90 181
91 // Private methods 182 _preProcess : function(pl, o) {
92 183 var ed = this.editor, h = o.content, process, stripClass;
93 _handlePasteEvent : function(e) {
94 var html = this._clipboardHTML(), ed = this.editor, sel = ed.selection, r;
95
96 // Removes italic, strong etc, the if was needed due to bug #1437114
97 if (ed && (r = sel.getRng()) && r.text.length > 0)
98 ed.execCommand('delete');
99
100 if (html && html.length > 0)
101 ed.execCommand('mcePasteWord', false, html);
102
103 return Event.cancel(e);
104 },
105
106 _insertText : function(content, bLinebreaks) {
107 content = this.editor.dom.encode(content);
108
109 if (content && content.length > 0) {
110 // Delete any highlighted text before pasting
111 if (!this.editor.selection.isCollapsed())
112 this.editor.execCommand("Delete");
113 184
114 if (bLinebreaks) { 185 //console.log('Before preprocess:' + o.content);
115 // Special paragraph treatment
116 if (this.editor.getParam("paste_create_paragraphs", true)) {
117 var rl = this.editor.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\u201c|\u201d,",\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(',');
118 for (var i=0; i<rl.length; i+=2)
119 content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]);
120 186
121 content = content.replace(/\r\n\r\n/g, '</p><p>'); 187 function process(items) {
122 content = content.replace(/\r\r/g, '</p><p>'); 188 each(items, function(v) {
123 content = content.replace(/\n\n/g, '</p><p>'); 189 // Remove or replace
124 190 if (v.constructor == RegExp)
125 // Has paragraphs 191 h = h.replace(v, '');
126 if ((pos = content.indexOf('</p><p>')) != -1) { 192 else
127 this.editor.execCommand("Delete"); 193 h = h.replace(v[0], v[1]);
128 194 });
129 var node = this.editor.selection.getNode(); 195 };
130
131 // Get list of elements to break
132 var breakElms = [];
133 196
134 do { 197 // Detect Word content and process it more aggressive
135 if (node.nodeType == 1) { 198 if (/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(h) || o.wordContent) {
136 // Don't break tables and break at body 199 o.wordContent = true; // Mark the pasted contents as word specific content
137 if (node.nodeName == "TD" || node.nodeName == "BODY") 200 //console.log('Word contents detected.');
138 break;
139
140 breakElms[breakElms.length] = node;
141 }
142 } while(node = node.parentNode);
143 201
144 var before = "", after = "</p>"; 202 // Process away some basic content
145 before += content.substring(0, pos); 203 process([
204 /^\s*(&nbsp;)+/g, // nbsp entities at the start of contents
205 /(&nbsp;|<br[^>]*>)+\s*$/g // nbsp entities at the end of contents
206 ]);
146 207
147 for (var i=0; i<breakElms.length; i++) { 208 if (ed.getParam('paste_convert_middot_lists', true)) {
148 before += "</" + breakElms[i].nodeName + ">"; 209 process([
149 after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; 210 [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'], // Convert supportLists to a list item marker
150 } 211 [/(<span[^>]+:\s*symbol[^>]+>)/gi, '$1__MCE_ITEM__'], // Convert symbol spans to list items
212 [/(<span[^>]+mso-list:[^>]+>)/gi, '$1__MCE_ITEM__'] // Convert mso-list to item marker
213 ]);
214 }
151 215
152 before += "<p>"; 216 process([
153 content = before + content.substring(pos+7) + after; 217 /<!--[\s\S]+?-->/gi, // Word comments
154 } 218 /<\/?(img|font|meta|link|style|div|v:\w+)[^>]*>/gi, // Remove some tags including VML content
155 } 219 /<\\?\?xml[^>]*>/gi, // XML namespace declarations
220 /<\/?o:[^>]*>/gi, // MS namespaced elements <o:tag>
221 / (id|name|language|type|on\w+|v:\w+)=\"([^\"]*)\"/gi, // on.., class, style and language attributes with quotes
222 / (id|name|language|type|on\w+|v:\w+)=(\w+)/gi, // on.., class, style and language attributes without quotes (IE)
223 [/<(\/?)s>/gi, '<$1strike>'], // Convert <s> into <strike> for line-though
224 /<script[^>]+>[\s\S]*?<\/script>/gi, // All scripts elements for msoShowComment for example
225 [/&nbsp;/g, '\u00a0'] // Replace nsbp entites to char since it's easier to handle
226 ]);
156 227
157 if (this.editor.getParam("paste_create_linebreaks", true)) { 228 // Remove all spans if no styles is to be retained
158 content = content.replace(/\r\n/g, '<br />'); 229 if (!ed.getParam('paste_retain_style_properties')) {
159 content = content.replace(/\r/g, '<br />'); 230 process([
160 content = content.replace(/\n/g, '<br />'); 231 /<\/?(span)[^>]*>/gi
161 } 232 ]);
162 } 233 }
234 }
163 235
164 this.editor.execCommand("mceInsertRawHTML", false, content); 236 // Allow for class names to be retained if desired; either all, or just the ones from Word
237 // Note that the paste_strip_class_attributes: 'none, verify_css_classes: true is also a good variation.
238 stripClass = ed.getParam('paste_strip_class_attributes', 'all');
239 if (stripClass != 'none') {
240 if (stripClass == 'all') {
241 process([
242 / class=\"([^\"]*)\"/gi, // class attributes with quotes
243 / class=(\w+)/gi // class attributes without quotes (IE)
244 ]);
245 } else { // Only strip the 'mso*' classes
246 process([
247 / class=\"(mso[^\"]*)\"/gi, // class attributes with quotes
248 / class=(mso\w+)/gi // class attributes without quotes (IE)
249 ]);
250 }
165 } 251 }
166 },
167 252
168 _insertWordContent : function(content) { 253 // Remove spans option
169 var t = this, ed = t.editor; 254 if (ed.getParam('paste_remove_spans')) {
255 process([
256 /<\/?(span)[^>]*>/gi
257 ]);
258 }
170 259
171 if (content && content.length > 0) { 260 //console.log('After preprocess:' + h);
172 // Cleanup Word content
173 var bull = String.fromCharCode(8226);
174 var middot = String.fromCharCode(183);
175 261
176 if (ed.getParam('paste_insert_word_content_callback')) 262 o.content = h;
177 content = ed.execCallback('paste_insert_word_content_callback', 'before', content); 263 },
178 264
179 var rl = ed.getParam("paste_replace_list", '\u2122,<sup>TM</sup>,\u2026,...,\x93|\x94|\u201c|\u201d,",\x60|\x91|\x92|\u2018|\u2019,\',\u2013|\u2014|\u2015|\u2212,-').split(','); 265 /**
180 for (var i=0; i<rl.length; i+=2) 266 * Various post process items.
181 content = content.replace(new RegExp(rl[i], 'gi'), rl[i+1]); 267 */
268 _postProcess : function(pl, o) {
269 var t = this, ed = t.editor, dom = ed.dom, styleProps;
182 270
183 if (this.editor.getParam("paste_convert_headers_to_strong", false)) { 271 if (o.wordContent) {
184 content = content.replace(new RegExp('<p class=MsoHeading.*?>(.*?)<\/p>', 'gi'), '<p><b>$1</b></p>'); 272 // Remove named anchors or TOC links
185 } 273 each(dom.select('a', o.node), function(a) {
274 if (!a.href || a.href.indexOf('#_Toc') != -1)
275 dom.remove(a, 1);
276 });
186 277
187 content = content.replace(new RegExp('tab-stops: list [0-9]+.0pt">', 'gi'), '">' + "--list--"); 278 if (t.editor.getParam('paste_convert_middot_lists', true))
188 content = content.replace(new RegExp(bull + "(.*?)<BR>", "gi"), "<p>" + middot + "$1</p>"); 279 t._convertLists(pl, o);
189 content = content.replace(new RegExp('<SPAN style="mso-list: Ignore">', 'gi'), "<span>" + bull); // Covert to bull list
190 content = content.replace(/<o:p><\/o:p>/gi, "");
191 content = content.replace(new RegExp('<br style="page-break-before: always;.*>', 'gi'), '-- page break --'); // Replace pagebreaks
192 content = content.replace(/<!--([\s\S]*?)-->|<style>[\s\S]*?<\/style>/g, ""); // Word comments
193 content = content.replace(/<(meta|link)[^>]+>/g, ""); // Header elements
194 280
195 if (this.editor.getParam("paste_remove_spans", true)) 281 // Process styles
196 content = content.replace(/<\/?span[^>]*>/gi, ""); 282 styleProps = ed.getParam('paste_retain_style_properties'); // retained properties
197 283
198 if (this.editor.getParam("paste_remove_styles", true)) 284 // If string property then split it
199 content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3"); 285 if (tinymce.is(styleProps, 'string'))
286 styleProps = tinymce.explode(styleProps);
200 287
201 content = content.replace(/<\/?font[^>]*>/gi, ""); 288 // Retains some style properties
289 each(dom.select('*', o.node), function(el) {
290 var newStyle = {}, npc = 0, i, sp, sv;
202 291
203 // Strips class attributes. 292 // Store a subset of the existing styles
204 switch (this.editor.getParam("paste_strip_class_attributes", "all")) { 293 if (styleProps) {
205 case "all": 294 for (i = 0; i < styleProps.length; i++) {
206 content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); 295 sp = styleProps[i];
207 break; 296 sv = dom.getStyle(el, sp);
208 297
209 case "mso": 298 if (sv) {
210 content = content.replace(new RegExp('<(\\w[^>]*) class="?mso([^ |>]*)([^>]*)', 'gi'), "<$1$3"); 299 newStyle[sp] = sv;
211 break; 300 npc++;
212 } 301 }
302 }
303 }
213 304
214 content = content.replace(new RegExp('href="?' + this._reEscape("" + document.location) + '', 'gi'), 'href="' + this.editor.documentBaseURI.getURI()); 305 // Remove all of the existing styles
215 content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); 306 dom.setAttrib(el, 'style', '');
216 content = content.replace(/<\\?\?xml[^>]*>/gi, "");
217 content = content.replace(/<\/?\w+:[^>]*>/gi, "");
218 content = content.replace(/-- page break --\s*<p>&nbsp;<\/p>/gi, ""); // Remove pagebreaks
219 content = content.replace(/-- page break --/gi, ""); // Remove pagebreaks
220 307
221 // content = content.replace(/\/?&nbsp;*/gi, ""); &nbsp; 308 if (styleProps && npc > 0)
222 // content = content.replace(/<p>&nbsp;<\/p>/gi, ''); 309 dom.setStyles(el, newStyle); // Add back the stored subset of styles
310 else // Remove empty span tags that do not have class attributes
311 if (el.nodeName == 'SPAN' && !el.className)
312 dom.remove(el, true);
313 });
314 }
223 315
224 if (!this.editor.getParam('force_p_newlines')) { 316 // Remove all style information or only specifically on WebKit to avoid the style bug on that browser
225 content = content.replace('', '' ,'gi'); 317 if (ed.getParam("paste_remove_styles") || (ed.getParam("paste_remove_styles_if_webkit") && tinymce.isWebKit)) {
226 content = content.replace('</p>', '<br /><br />' ,'gi'); 318 each(dom.select('*[style]', o.node), function(el) {
319 el.removeAttribute('style');
320 el.removeAttribute('mce_style');
321 });
322 } else {
323 if (tinymce.isWebKit) {
324 // We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />
325 // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles
326 each(dom.select('*', o.node), function(el) {
327 el.removeAttribute('mce_style');
328 });
227 } 329 }
330 }
331 },
228 332
229 if (!tinymce.isIE && !this.editor.getParam('force_p_newlines')) { 333 /**
230 content = content.replace(/<\/?p[^>]*>/gi, ""); 334 * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.
231 } 335 */
336 _convertLists : function(pl, o) {
337 var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;
232 338
233 content = content.replace(/<\/?div[^>]*>/gi, ""); 339 // Convert middot lists into real semantic lists
340 each(dom.select('p', o.node), function(p) {
341 var sib, val = '', type, html, idx, parents;
234 342
235 // Convert all middlot lists to UL lists 343 // Get text node value at beginning of paragraph
236 if (this.editor.getParam("paste_convert_middot_lists", true)) { 344 for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)
237 var div = ed.dom.create("div", null, content); 345 val += sib.nodeValue;
238 346
239 // Convert all middot paragraphs to li elements 347 val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');
240 var className = this.editor.getParam("paste_unindented_list_class", "unIndentedList");
241 348
242 while (this._convertMiddots(div, "--list--")) ; // bull 349 // Detect unordered lists look for bullets
243 while (this._convertMiddots(div, middot, className)) ; // Middot 350 if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val))
244 while (this._convertMiddots(div, bull)) ; // bull 351 type = 'ul';
245 352
246 content = div.innerHTML; 353 // Detect ordered lists 1., a. or ixv.
247 } 354 if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val))
355 type = 'ol';
248 356
249 // Replace all headers with strong and fix some other issues 357 // Check if node value matches the list pattern: o&nbsp;&nbsp;
250 if (this.editor.getParam("paste_convert_headers_to_strong", false)) { 358 if (type) {
251 content = content.replace(/<h[1-6]>&nbsp;<\/h[1-6]>/gi, '<p>&nbsp;&nbsp;</p>'); 359 margin = parseFloat(p.style.marginLeft || 0);
252 content = content.replace(/<h[1-6]>/gi, '<p><b>');
253 content = content.replace(/<\/h[1-6]>/gi, '</b></p>');
254 content = content.replace(/<b>&nbsp;<\/b>/gi, '<b>&nbsp;&nbsp;</b>');
255 content = content.replace(/^(&nbsp;)*/gi, '');
256 }
257 360
258 content = content.replace(/--list--/gi, ""); // Remove --list-- 361 if (margin > lastMargin)
362 levels.push(margin);
259 363
260 if (ed.getParam('paste_insert_word_content_callback')) 364 if (!listElm || type != lastType) {
261 content = ed.execCallback('paste_insert_word_content_callback', 'after', content); 365 listElm = dom.create(type);
366 dom.insertAfter(listElm, p);
367 } else {
368 // Nested list element
369 if (margin > lastMargin) {
370 listElm = li.appendChild(dom.create(type));
371 } else if (margin < lastMargin) {
372 // Find parent level based on margin value
373 idx = tinymce.inArray(levels, margin);
374 parents = dom.getParents(listElm.parentNode, type);
375 listElm = parents[parents.length - 1 - idx] || listElm;
376 }
377 }
262 378
263 // Insert cleaned content 379 // Remove middot or number spans if they exists
264 this.editor.execCommand("mceInsertContent", false, content); 380 each(dom.select('span', p), function(span) {
381 var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');
265 382
266 if (this.editor.getParam('paste_force_cleanup_wordpaste', true)) { 383 // Remove span with the middot or the number
267 var ed = this.editor; 384 if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html))
385 dom.remove(span);
386 else if (/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))
387 dom.remove(span);
388 });
268 389
269 window.setTimeout(function() { 390 html = p.innerHTML;
270 ed.execCommand("mceCleanup");
271 }, 1); // Do normal cleanup detached from this thread
272 }
273 }
274 },
275 391
276 _reEscape : function(s) { 392 // Remove middot/list items
277 var l = "?.\\*[](){}+^$:"; 393 if (type == 'ul')
278 var o = ""; 394 html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/, '');
395 else
396 html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');
279 397
280 for (var i=0; i<s.length; i++) { 398 // Create li and add paragraph data into the new li
281 var c = s.charAt(i); 399 li = listElm.appendChild(dom.create('li', 0, html));
400 dom.remove(p);
282 401
283 if (l.indexOf(c) != -1) 402 lastMargin = margin;
284 o += '\\' + c; 403 lastType = type;
285 else 404 } else
286 o += c; 405 listElm = lastMargin = 0; // End list element
287 } 406 });
288 407
289 return o; 408 // Remove any left over makers
409 html = o.node.innerHTML;
410 if (html.indexOf('__MCE_ITEM__') != -1)
411 o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');
290 }, 412 },
291 413
292 _convertMiddots : function(div, search, class_name) { 414 /**
293 var ed = this.editor, mdot = String.fromCharCode(183), bull = String.fromCharCode(8226); 415 * This method will split the current block parent and insert the contents inside the split position.
294 var nodes, prevul, i, p, ul, li, np, cp, li; 416 * This logic can be improved so text nodes at the start/end remain in the start/end block elements
295 417 */
296 nodes = div.getElementsByTagName("p"); 418 _insertBlockContent : function(ed, dom, content) {
297 for (i=0; i<nodes.length; i++) { 419 var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight;
298 p = nodes[i];
299 420
300 // Is middot 421 function select(n) {
301 if (p.innerHTML.indexOf(search) == 0) { 422 var r;
302 ul = ed.dom.create("ul");
303 423
304 if (class_name) 424 if (tinymce.isIE) {
305 ul.className = class_name; 425 r = ed.getDoc().body.createTextRange();
426 r.moveToElementText(n);
427 r.collapse(false);
428 r.select();
429 } else {
430 sel.select(n, 1);
431 sel.collapse(false);
432 }
433 };
306 434
307 // Add the first one 435 // Insert a marker for the caret position
308 li = ed.dom.create("li"); 436 this._insert('<span id="_marker">&nbsp;</span>', 1);
309 li.innerHTML = p.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--|&nbsp;', "gi"), ''); 437 marker = dom.get('_marker');
310 ul.appendChild(li); 438 parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');
311 439
312 // Add the rest 440 // If it's a parent block but not a table cell
313 np = p.nextSibling; 441 if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) {
314 while (np) { 442 // Split parent block
315 // If the node is whitespace, then 443 marker = dom.split(parentBlock, marker);
316 // ignore it and continue on.
317 if (np.nodeType == 3 && new RegExp('^\\s$', 'm').test(np.nodeValue)) {
318 np = np.nextSibling;
319 continue;
320 }
321 444
322 if (search == mdot) { 445 // Insert nodes before the marker
323 if (np.nodeType == 1 && new RegExp('^o(\\s+|&nbsp;)').test(np.innerHTML)) { 446 each(dom.create('div', 0, content).childNodes, function(n) {
324 // Second level of nesting 447 last = marker.parentNode.insertBefore(n.cloneNode(true), marker);
325 if (!prevul) { 448 });
326 prevul = ul;
327 ul = ed.dom.create("ul");
328 prevul.appendChild(ul);
329 }
330 np.innerHTML = np.innerHTML.replace(/^o/, '');
331 } else {
332 // Pop the stack if we're going back up to the first level
333 if (prevul) {
334 ul = prevul;
335 prevul = null;
336 }
337 // Not element or middot paragraph
338 if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)
339 break;
340 }
341 } else {
342 // Not element or middot paragraph
343 if (np.nodeType != 1 || np.innerHTML.indexOf(search) != 0)
344 break;
345 }
346 449
347 cp = np.nextSibling; 450 // Move caret after marker
348 li = ed.dom.create("li"); 451 select(last);
349 li.innerHTML = np.innerHTML.replace(new RegExp('' + mdot + '|' + bull + '|--list--|&nbsp;', "gi"), ''); 452 } else {
350 np.parentNode.removeChild(np); 453 dom.setOuterHTML(marker, content);
351 ul.appendChild(li); 454 sel.select(ed.getBody(), 1);
352 np = cp; 455 sel.collapse(0);
353 } 456 }
354 457
355 p.parentNode.replaceChild(ul, p); 458 dom.remove('_marker'); // Remove marker if it's left
356 459
357 return true; 460 // Get element, position and height
358 } 461 elm = sel.getStart();
359 } 462 vp = dom.getViewPort(ed.getWin());
463 y = ed.dom.getPos(elm).y;
464 elmHeight = elm.clientHeight;
360 465
361 return false; 466 // Is element within viewport if not then scroll it into view
467 if (y < vp.y || y + elmHeight > vp.y + vp.h)
468 ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25;
362 }, 469 },
363 470
364 _clipboardHTML : function() { 471 /**
365 var div = document.getElementById('_TinyMCE_clipboardHTML'); 472 * Inserts the specified contents at the caret position.
473 */
474 _insert : function(h, skip_undo) {
475 var ed = this.editor;
366 476
367 if (!div) { 477 // First delete the contents seems to work better on WebKit
368 var div = document.createElement('DIV'); 478 if (!ed.selection.isCollapsed())
369 div.id = '_TinyMCE_clipboardHTML'; 479 ed.getDoc().execCommand('Delete', false, null);
370 480
371 with (div.style) { 481 // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents
372 visibility = 'hidden'; 482 ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});
373 overflow = 'hidden'; 483 },
374 position = 'absolute';
375 width = 1;
376 height = 1;
377 }
378 484
379 document.body.appendChild(div); 485 /**
380 } 486 * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.
487 */
488 _legacySupport : function() {
489 var t = this, ed = t.editor;
490
491 // Register commands for backwards compatibility
492 each(['mcePasteText', 'mcePasteWord'], function(cmd) {
493 ed.addCommand(cmd, function() {
494 ed.windowManager.open({
495 file : t.url + (cmd == 'mcePasteText' ? '/pastetext.htm' : '/pasteword.htm'),
496 width : parseInt(ed.getParam("paste_dialog_width", "450")),
497 height : parseInt(ed.getParam("paste_dialog_height", "400")),
498 inline : 1
499 });
500 });
501 });
381 502
382 div.innerHTML = ''; 503 // Register buttons for backwards compatibility
383 var rng = document.body.createTextRange(); 504 ed.addButton('pastetext', {title : 'paste.paste_text_desc', cmd : 'mcePasteText'});
384 rng.moveToElementText(div); 505 ed.addButton('pasteword', {title : 'paste.paste_word_desc', cmd : 'mcePasteWord'});
385 rng.execCommand('Paste'); 506 ed.addButton('selectall', {title : 'paste.selectall_desc', cmd : 'selectall'});
386 var html = div.innerHTML;
387 div.innerHTML = '';
388 return html;
389 } 507 }
390 }); 508 });
391 509
diff --git a/public/javascripts/tiny_mce/plugins/paste/js/pastetext.js b/public/javascripts/tiny_mce/plugins/paste/js/pastetext.js
index 326bb16..c524f9e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/js/pastetext.js
+++ b/public/javascripts/tiny_mce/plugins/paste/js/pastetext.js
@@ -1,42 +1,36 @@
1tinyMCEPopup.requireLangPack(); 1tinyMCEPopup.requireLangPack();
2 2
3function saveContent() { 3var PasteTextDialog = {
4 if (document.forms[0].htmlSource.value == '') { 4 init : function() {
5 tinyMCEPopup.close(); 5 this.resize();
6 return false; 6 },
7 }
8
9 tinyMCEPopup.execCommand('mcePasteText', false, {
10 html : document.forms[0].htmlSource.value,
11 linebreaks : document.forms[0].linebreaks.checked
12 });
13 7
14 tinyMCEPopup.close(); 8 insert : function() {
15} 9 var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;
16 10
17function onLoadInit() { 11 // Convert linebreaks into paragraphs
18 tinyMCEPopup.resizeToInnerSize(); 12 if (document.getElementById('linebreaks').checked) {
13 lines = h.split(/\r?\n/);
14 if (lines.length > 1) {
15 h = '';
16 tinymce.each(lines, function(row) {
17 h += '<p>' + row + '</p>';
18 });
19 }
20 }
19 21
20 // Remove Gecko spellchecking 22 tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});
21 if (tinymce.isGecko) 23 tinyMCEPopup.close();
22 document.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck"); 24 },
23 25
24 resizeInputs(); 26 resize : function() {
25} 27 var vp = tinyMCEPopup.dom.getViewPort(window), el;
26 28
27var wHeight=0, wWidth=0, owHeight=0, owWidth=0; 29 el = document.getElementById('content');
28 30
29function resizeInputs() { 31 el.style.width = (vp.w - 20) + 'px';
30 if (!tinymce.isIE) { 32 el.style.height = (vp.h - 90) + 'px';
31 wHeight = self.innerHeight-80;
32 wWidth = self.innerWidth-17;
33 } else {
34 wHeight = document.body.clientHeight-80;
35 wWidth = document.body.clientWidth-17;
36 } 33 }
34};
37 35
38 document.forms[0].htmlSource.style.height = Math.abs(wHeight) + 'px'; 36tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);
39 document.forms[0].htmlSource.style.width = Math.abs(wWidth) + 'px';
40}
41
42tinyMCEPopup.onInit.add(onLoadInit); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/paste/js/pasteword.js b/public/javascripts/tiny_mce/plugins/paste/js/pasteword.js
index 6701b99..a52731c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/js/pasteword.js
+++ b/public/javascripts/tiny_mce/plugins/paste/js/pasteword.js
@@ -1,56 +1,51 @@
1tinyMCEPopup.requireLangPack(); 1tinyMCEPopup.requireLangPack();
2 2
3function saveContent() { 3var PasteWordDialog = {
4 var html = document.getElementById("frmData").contentWindow.document.body.innerHTML; 4 init : function() {
5 var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';
5 6
6 if (html == ''){ 7 // Create iframe
7 tinyMCEPopup.close(); 8 el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';
8 return false; 9 ifr = document.getElementById('iframe');
9 } 10 doc = ifr.contentWindow.document;
10
11 tinyMCEPopup.execCommand('mcePasteWord', false, html);
12 tinyMCEPopup.close();
13}
14 11
15function onLoadInit() { 12 // Force absolute CSS urls
16 tinyMCEPopup.resizeToInnerSize(); 13 css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];
14 css = css.concat(tinymce.explode(ed.settings.content_css) || []);
15 tinymce.each(css, function(u) {
16 cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';
17 });
17 18
18 // Fix for endless reloading in FF 19 // Write content into iframe
19 window.setTimeout(createIFrame, 10); 20 doc.open();
20} 21 doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');
22 doc.close();
21 23
22function createIFrame() { 24 doc.designMode = 'on';
23 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>'; 25 this.resize();
24}
25 26
26var wHeight=0, wWidth=0, owHeight=0, owWidth=0; 27 window.setTimeout(function() {
28 ifr.contentWindow.focus();
29 }, 10);
30 },
27 31
28function initIframe(doc) { 32 insert : function() {
29 var dir = tinyMCEPopup.editor.settings.directionality; 33 var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;
30 34
31 doc.body.dir = dir; 35 tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});
32 36 tinyMCEPopup.close();
33 // Remove Gecko spellchecking 37 },
34 if (tinymce.isGecko)
35 doc.body.spellcheck = tinyMCEPopup.getParam("gecko_spellcheck");
36 38
37 resizeInputs(); 39 resize : function() {
38} 40 var vp = tinyMCEPopup.dom.getViewPort(window), el;
39 41
40function resizeInputs() { 42 el = document.getElementById('iframe');
41 if (!tinymce.isIE) {
42 wHeight = self.innerHeight - 80;
43 wWidth = self.innerWidth - 18;
44 } else {
45 wHeight = document.body.clientHeight - 80;
46 wWidth = document.body.clientWidth - 18;
47 }
48 43
49 var elm = document.getElementById('frmData'); 44 if (el) {
50 if (elm) { 45 el.style.width = (vp.w - 20) + 'px';
51 elm.style.height = Math.abs(wHeight) + 'px'; 46 el.style.height = (vp.h - 90) + 'px';
52 elm.style.width = Math.abs(wWidth) + 'px'; 47 }
53 } 48 }
54} 49};
55 50
56tinyMCEPopup.onInit.add(onLoadInit); 51tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);
diff --git a/public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js
index eeac778..eeac778 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/paste/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/paste/pastetext.htm b/public/javascripts/tiny_mce/plugins/paste/pastetext.htm
index 2f2b341..42c3d9c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/pastetext.htm
+++ b/public/javascripts/tiny_mce/plugins/paste/pastetext.htm
@@ -4,31 +4,30 @@
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="js/pastetext.js"></script> 6 <script type="text/javascript" src="js/pastetext.js"></script>
7 <base target="_self" />
8</head> 7</head>
9<body onresize="resizeInputs();" style="display:none; overflow:hidden;"> 8<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">
10<form name="source" onsubmit="saveContent();return false;" action="#"> 9 <form name="source" onsubmit="return PasteTextDialog.insert();" action="#">
11 <div style="float: left" class="title">{#paste.paste_text_desc}</div> 10 <div style="float: left" class="title">{#paste.paste_text_desc}</div>
12 11
13 <div style="float: right"> 12 <div style="float: right">
14 <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label> 13 <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>
15 </div> 14 </div>
16 15
17 <br style="clear: both" /> 16 <br style="clear: both" />
18 17
19 <div>{#paste_dlg.text_title}</div> 18 <div>{#paste_dlg.text_title}</div>
20 19
21 <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> 20 <textarea id="content" name="content" 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>
22 21
23 <div class="mceActionPanel"> 22 <div class="mceActionPanel">
24 <div style="float: left"> 23 <div style="float: left">
25 <input type="submit" name="insert" value="{#insert}" id="insert" /> 24 <input type="submit" name="insert" value="{#insert}" id="insert" />
26 </div> 25 </div>
27 26
28 <div style="float: right"> 27 <div style="float: right">
29 <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" /> 28 <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />
29 </div>
30 </div> 30 </div>
31 </div> 31 </form>
32</form>
33</body> 32</body>
34</html> \ No newline at end of file 33</html> \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/paste/pasteword.htm b/public/javascripts/tiny_mce/plugins/paste/pasteword.htm
index 9e5ab1b..f4a9b3d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/paste/pasteword.htm
+++ b/public/javascripts/tiny_mce/plugins/paste/pasteword.htm
@@ -4,11 +4,9 @@
4 <title>{#paste.paste_word_desc}</title> 4 <title>{#paste.paste_word_desc}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="js/pasteword.js"></script> 6 <script type="text/javascript" src="js/pasteword.js"></script>
7 <link href="css/pasteword.css" rel="stylesheet" type="text/css" />
8 <base target="_self" />
9</head> 7</head>
10<body onresize="resizeInputs();" style="display:none; overflow:hidden;"> 8<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">
11 <form name="source" onsubmit="saveContent();" action="#"> 9 <form name="source" onsubmit="return PasteWordDialog.insert();" action="#">
12 <div class="title">{#paste.paste_word_desc}</div> 10 <div class="title">{#paste.paste_word_desc}</div>
13 11
14 <div>{#paste_dlg.word_title}</div> 12 <div>{#paste_dlg.word_title}</div>
@@ -17,7 +15,7 @@
17 15
18 <div class="mceActionPanel"> 16 <div class="mceActionPanel">
19 <div style="float: left"> 17 <div style="float: left">
20 <input type="button" id="insert" name="insert" value="{#insert}" onclick="saveContent();" /> 18 <input type="submit" id="insert" name="insert" value="{#insert}" />
21 </div> 19 </div>
22 20
23 <div style="float: right"> 21 <div style="float: right">
diff --git a/public/javascripts/tiny_mce/plugins/preview/editor_plugin.js b/public/javascripts/tiny_mce/plugins/preview/editor_plugin.js
index deb4bce..507909c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/preview/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/preview/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.Preview',{init:function(ed,url){var t=this,css=tinymce.explode(ed.settings.content_css);t.editor=ed;tinymce.each(css,function(u,k){css[k]=ed.documentBaseURI.toAbsolute(u);});ed.addCommand('mcePreview',function(){ed.windowManager.open({file:ed.getParam("plugin_preview_pageurl",url+"/preview.html"),width:parseInt(ed.getParam("plugin_preview_width","550")),height:parseInt(ed.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:css.join(','),inline:ed.getParam("plugin_preview_inline",1)},{base:ed.documentBaseURI.getURI()});});ed.addButton('preview',{title:'preview.preview_desc',cmd:'mcePreview'});},getInfo:function(){return{longname:'Preview',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('preview',tinymce.plugins.Preview);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js
index b2d27f7..0582ab8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/preview/editor_plugin_src.js
@@ -1,5 +1,5 @@
1/** 1/**
2 * $Id: editor_plugin_src.js 895 2008-07-10 14:34:23Z spocke $ 2 * $Id: editor_plugin_src.js 1056 2009-03-13 12:47:03Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
@@ -24,7 +24,7 @@
24 height : parseInt(ed.getParam("plugin_preview_height", "600")), 24 height : parseInt(ed.getParam("plugin_preview_height", "600")),
25 resizable : "yes", 25 resizable : "yes",
26 scrollbars : "yes", 26 scrollbars : "yes",
27 popup_css : css.join(','), 27 popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"),
28 inline : ed.getParam("plugin_preview_inline", 1) 28 inline : ed.getParam("plugin_preview_inline", 1)
29 }, { 29 }, {
30 base : ed.documentBaseURI.getURI() 30 base : ed.documentBaseURI.getURI()
diff --git a/public/javascripts/tiny_mce/plugins/preview/example.html b/public/javascripts/tiny_mce/plugins/preview/example.html
index b2c3d90..b2c3d90 100755..100644
--- a/public/javascripts/tiny_mce/plugins/preview/example.html
+++ b/public/javascripts/tiny_mce/plugins/preview/example.html
diff --git a/public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js b/public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js
index f8dc810..f8dc810 100755..100644
--- a/public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js
+++ b/public/javascripts/tiny_mce/plugins/preview/jscripts/embed.js
diff --git a/public/javascripts/tiny_mce/plugins/preview/preview.html b/public/javascripts/tiny_mce/plugins/preview/preview.html
index 7960f78..67e7b14 100755..100644
--- a/public/javascripts/tiny_mce/plugins/preview/preview.html
+++ b/public/javascripts/tiny_mce/plugins/preview/preview.html
@@ -1,19 +1,17 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1<html xmlns="http://www.w3.org/1999/xhtml"> 2<html xmlns="http://www.w3.org/1999/xhtml">
2<head> 3<head>
3<script language="javascript" src="../../tiny_mce_popup.js"></script> 4<script type="text/javascript" src="../../tiny_mce_popup.js"></script>
4<script type="text/javascript" src="jscripts/embed.js"></script> 5<script type="text/javascript" src="jscripts/embed.js"></script>
5<script type="text/javascript"> 6<script type="text/javascript"><!--
6tinyMCEPopup.onInit.add(function(ed) {
7 var dom = tinyMCEPopup.dom;
8
9 dom.setHTML('content', ed.getContent());
10});
11
12document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">'); 7document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');
8// -->
13</script> 9</script>
14<title>{#preview.preview_desc}</title> 10<title>{#preview.preview_desc}</title>
15</head> 11</head>
16<body id="content"> 12<body id="content">
17<!-- Gets filled with editor contents --> 13<script type="text/javascript">
14 document.write(tinyMCEPopup.editor.getContent());
15</script>
18</body> 16</body>
19</html> 17</html>
diff --git a/public/javascripts/tiny_mce/plugins/print/editor_plugin.js b/public/javascripts/tiny_mce/plugins/print/editor_plugin.js
index 7d09a87..b5b3a55 100755..100644
--- a/public/javascripts/tiny_mce/plugins/print/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/print/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.Print',{init:function(ed,url){ed.addCommand('mcePrint',function(){ed.getWin().print();});ed.addButton('print',{title:'print.print_desc',cmd:'mcePrint'});},getInfo:function(){return{longname:'Print',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('print',tinymce.plugins.Print);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js
index 51fe156..51fe156 100755..100644
--- a/public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/print/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/safari/blank.htm b/public/javascripts/tiny_mce/plugins/safari/blank.htm
index 266808c..266808c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/safari/blank.htm
+++ b/public/javascripts/tiny_mce/plugins/safari/blank.htm
diff --git a/public/javascripts/tiny_mce/plugins/safari/editor_plugin.js b/public/javascripts/tiny_mce/plugins/safari/editor_plugin.js
index 4daac19..794477c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/safari/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/safari/editor_plugin.js
@@ -1 +1 @@
(function(){var Event=tinymce.dom.Event,grep=tinymce.grep,each=tinymce.each,inArray=tinymce.inArray,isOldWebKit=tinymce.isOldWebKit;function isEmpty(d,e,f){var w,n;w=d.createTreeWalker(e,NodeFilter.SHOW_ALL,null,false);while(n=w.nextNode()){if(f){if(!f(n))return false;}if(n.nodeType==3&&n.nodeValue&&/[^\s\u00a0]+/.test(n.nodeValue))return false;if(n.nodeType==1&&/^(HR|IMG|TABLE)$/.test(n.nodeName))return false;}return true;};tinymce.create('tinymce.plugins.Safari',{init:function(ed){var t=this,dom;if(!tinymce.isWebKit)return;t.editor=ed;t.webKitFontSizes=['x-small','small','medium','large','x-large','xx-large','-webkit-xxx-large'];t.namedFontSizes=['xx-small','x-small','small','medium','large','x-large','xx-large'];ed.addCommand('CreateLink',function(u,v){var n=ed.selection.getNode(),dom=ed.dom,a;if(n&&(/^(left|right)$/i.test(dom.getStyle(n,'float',1))||/^(left|right)$/i.test(dom.getAttrib(n,'align')))){a=dom.create('a',{href:v},n.cloneNode());n.parentNode.replaceChild(a,n);ed.selection.select(a);}else ed.getDoc().execCommand("CreateLink",false,v);});ed.onPaste.add(function(ed,e){function removeStyles(e){e=e.target;if(e.nodeType==1){e.style.cssText='';each(ed.dom.select('*',e),function(e){e.style.cssText='';});}};Event.add(ed.getDoc(),'DOMNodeInserted',removeStyles);window.setTimeout(function(){Event.remove(ed.getDoc(),'DOMNodeInserted',removeStyles);},0);});ed.onKeyUp.add(function(ed,e){var h,b,r,n,s;if(e.keyCode==46||e.keyCode==8){b=ed.getBody();h=b.innerHTML;s=ed.selection;if(b.childNodes.length==1&&!/<(img|hr)/.test(h)&&tinymce.trim(h.replace(/<[^>]+>/g,'')).length==0){ed.setContent('<p><br mce_bogus="1" /></p>',{format:'raw'});n=b.firstChild;r=s.getRng();r.setStart(n,0);r.setEnd(n,0);s.setRng(r);}}});ed.addCommand('FormatBlock',function(u,v){var dom=ed.dom,e=dom.getParent(ed.selection.getNode(),dom.isBlock);if(e)dom.replace(dom.create(v),e,1);else ed.getDoc().execCommand("FormatBlock",false,v);});ed.addCommand('mceInsertContent',function(u,v){ed.getDoc().execCommand("InsertText",false,'mce_marker');ed.getBody().innerHTML=ed.getBody().innerHTML.replace(/mce_marker/g,ed.dom.processHTML(v)+'<span id="_mce_tmp">XX</span>');ed.selection.select(ed.dom.get('_mce_tmp'));ed.getDoc().execCommand("Delete",false,' ');});ed.onKeyPress.add(function(ed,e){var se,li,lic,r1,r2,n,sel,doc,be,af,pa;if(e.keyCode==13){sel=ed.selection;se=sel.getNode();if(e.shiftKey||ed.settings.force_br_newlines&&se.nodeName!='LI'){t._insertBR(ed);Event.cancel(e);}if(li=dom.getParent(se,'LI')){lic=dom.getParent(li,'OL,UL');doc=ed.getDoc();pa=dom.create('p');dom.add(pa,'br',{mce_bogus:"1"});if(isEmpty(doc,li)){if(n=dom.getParent(lic.parentNode,'LI,OL,UL'))return;n=dom.getParent(lic,'p,h1,h2,h3,h4,h5,h6,div')||lic;r1=doc.createRange();r1.setStartBefore(n);r1.setEndBefore(li);r2=doc.createRange();r2.setStartAfter(li);r2.setEndAfter(n);be=r1.cloneContents();af=r2.cloneContents();if(!isEmpty(doc,af))dom.insertAfter(af,n);dom.insertAfter(pa,n);if(!isEmpty(doc,be))dom.insertAfter(be,n);dom.remove(n);n=pa.firstChild;r1=doc.createRange();r1.setStartBefore(n);r1.setEndBefore(n);sel.setRng(r1);return Event.cancel(e);}}}});ed.onExecCommand.add(function(ed,cmd){var sel,dom,bl,bm;if(cmd=='InsertUnorderedList'||cmd=='InsertOrderedList'){sel=ed.selection;dom=ed.dom;if(bl=dom.getParent(sel.getNode(),function(n){return/^(H[1-6]|P|ADDRESS|PRE)$/.test(n.nodeName);})){bm=sel.getBookmark();dom.remove(bl,1);sel.moveToBookmark(bm);}}});ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName=='IMG'){t.selElm=e;ed.selection.select(e);}else t.selElm=null;});ed.onInit.add(function(){t._fixWebKitSpans();if(isOldWebKit)t._patchSafari2x(ed);});ed.onSetContent.add(function(){dom=ed.dom;each(['strong','b','em','u','strike','sub','sup','a'],function(v){each(grep(dom.select(v)).reverse(),function(n){var nn=n.nodeName.toLowerCase(),st;if(nn=='a'){if(n.name)dom.replace(dom.create('img',{mce_name:'a',name:n.name,'class':'mceItemAnchor'}),n);return;}switch(nn){case'b':case'strong':if(nn=='b')nn='strong';st='font-weight: bold;';break;case'em':st='font-style: italic;';break;case'u':st='text-decoration: underline;';break;case'sub':st='vertical-align: sub;';break;case'sup':st='vertical-align: super;';break;case'strike':st='text-decoration: line-through;';break;}dom.replace(dom.create('span',{mce_name:nn,style:st,'class':'Apple-style-span'}),n,1);});});});ed.onPreProcess.add(function(ed,o){dom=ed.dom;each(grep(o.node.getElementsByTagName('span')).reverse(),function(n){var v,bg;if(o.get){if(dom.hasClass(n,'Apple-style-span')){bg=n.style.backgroundColor;switch(dom.getAttrib(n,'mce_name')){case'font':if(!ed.settings.convert_fonts_to_spans)dom.setAttrib(n,'style','');break;case'strong':case'em':case'sub':case'sup':dom.setAttrib(n,'style','');break;case'strike':case'u':if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');else dom.setAttrib(n,'mce_name','');break;default:if(!ed.settings.inline_styles)dom.setAttrib(n,'style','');}if(bg)n.style.backgroundColor=bg;}}if(dom.hasClass(n,'mceItemRemoved'))dom.remove(n,1);});});ed.onPostProcess.add(function(ed,o){o.content=o.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g,'</$1>');o.content=o.content.replace(/ id=\"undefined\"/g,'');});},getInfo:function(){return{longname:'Safari compatibility',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_fixWebKitSpans:function(){var t=this,ed=t.editor;if(!isOldWebKit){Event.add(ed.getDoc(),'DOMNodeInserted',function(e){e=e.target;if(e&&e.nodeType==1)t._fixAppleSpan(e);});}else{ed.onExecCommand.add(function(){each(ed.dom.select('span'),function(n){t._fixAppleSpan(n);});ed.nodeChanged();});}},_fixAppleSpan:function(e){var ed=this.editor,dom=ed.dom,fz=this.webKitFontSizes,fzn=this.namedFontSizes,s=ed.settings,st,p;if(dom.getAttrib(e,'mce_fixed'))return;if(e.nodeName=='SPAN'&&e.className=='Apple-style-span'){st=e.style;if(!s.convert_fonts_to_spans){if(st.fontSize){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'size',inArray(fz,st.fontSize)+1);}if(st.fontFamily){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'face',st.fontFamily);}if(st.color){dom.setAttrib(e,'mce_name','font');dom.setAttrib(e,'color',dom.toHex(st.color));}if(st.backgroundColor){dom.setAttrib(e,'mce_name','font');dom.setStyle(e,'background-color',st.backgroundColor);}}else{if(st.fontSize)dom.setStyle(e,'fontSize',fzn[inArray(fz,st.fontSize)]);}if(st.fontWeight=='bold')dom.setAttrib(e,'mce_name','strong');if(st.fontStyle=='italic')dom.setAttrib(e,'mce_name','em');if(st.textDecoration=='underline')dom.setAttrib(e,'mce_name','u');if(st.textDecoration=='line-through')dom.setAttrib(e,'mce_name','strike');if(st.verticalAlign=='super')dom.setAttrib(e,'mce_name','sup');if(st.verticalAlign=='sub')dom.setAttrib(e,'mce_name','sub');dom.setAttrib(e,'mce_fixed','1');}},_patchSafari2x:function(ed){var t=this,setContent,getNode,dom=ed.dom,lr;if(ed.windowManager.onBeforeOpen){ed.windowManager.onBeforeOpen.add(function(){r=ed.selection.getRng();});}ed.selection.select=function(n){this.getSel().setBaseAndExtent(n,0,n,1);};getNode=ed.selection.getNode;ed.selection.getNode=function(){return t.selElm||getNode.call(this);};ed.selection.getRng=function(){var t=this,s=t.getSel(),d=ed.getDoc(),r,rb,ra,di;if(s.anchorNode){r=d.createRange();try{rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(1);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(1);di=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;r.setStart(di?s.anchorNode:s.focusNode,di?s.anchorOffset:s.focusOffset);r.setEnd(di?s.focusNode:s.anchorNode,di?s.focusOffset:s.anchorOffset);lr=r;}catch(ex){}}return r||lr;};setContent=ed.selection.setContent;ed.selection.setContent=function(h,s){var r=this.getRng(),b;try{setContent.call(this,h,s);}catch(ex){b=dom.create('body');b.innerHTML=h;each(b.childNodes,function(n){r.insertNode(n.cloneNode(true));});}};},_insertBR:function(ed){var dom=ed.dom,s=ed.selection,r=s.getRng(),br;r.insertNode(br=dom.create('br'));r.setStartAfter(br);r.setEndAfter(br);s.setRng(r);if(s.getSel().focusNode==br.previousSibling){s.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'),br));s.collapse(1);}ed.getWin().scrollTo(0,dom.getPos(s.getRng().startContainer).y);}});tinymce.PluginManager.add('safari',tinymce.plugins.Safari);})(); \ No newline at end of file (function(){var a=tinymce.dom.Event,c=tinymce.grep,d=tinymce.each,b=tinymce.inArray;function e(j,i,h){var g,k;g=j.createTreeWalker(i,NodeFilter.SHOW_ALL,null,false);while(k=g.nextNode()){if(h){if(!h(k)){return false}}if(k.nodeType==3&&k.nodeValue&&/[^\s\u00a0]+/.test(k.nodeValue)){return false}if(k.nodeType==1&&/^(HR|IMG|TABLE)$/.test(k.nodeName)){return false}}return true}tinymce.create("tinymce.plugins.Safari",{init:function(f){var g=this,h;if(!tinymce.isWebKit){return}g.editor=f;g.webKitFontSizes=["x-small","small","medium","large","x-large","xx-large","-webkit-xxx-large"];g.namedFontSizes=["xx-small","x-small","small","medium","large","x-large","xx-large"];f.addCommand("CreateLink",function(k,j){var m=f.selection.getNode(),l=f.dom,i;if(m&&(/^(left|right)$/i.test(l.getStyle(m,"float",1))||/^(left|right)$/i.test(l.getAttrib(m,"align")))){i=l.create("a",{href:j},m.cloneNode());m.parentNode.replaceChild(i,m);f.selection.select(i)}else{f.getDoc().execCommand("CreateLink",false,j)}});f.onKeyUp.add(function(j,o){var l,i,m,p,k;if(o.keyCode==46||o.keyCode==8){i=j.getBody();l=i.innerHTML;k=j.selection;if(i.childNodes.length==1&&!/<(img|hr)/.test(l)&&tinymce.trim(l.replace(/<[^>]+>/g,"")).length==0){j.setContent('<p><br mce_bogus="1" /></p>',{format:"raw"});p=i.firstChild;m=k.getRng();m.setStart(p,0);m.setEnd(p,0);k.setRng(m)}}});f.addCommand("FormatBlock",function(j,i){var l=f.dom,k=l.getParent(f.selection.getNode(),l.isBlock);if(k){l.replace(l.create(i),k,1)}else{f.getDoc().execCommand("FormatBlock",false,i)}});f.addCommand("mceInsertContent",function(j,i){f.getDoc().execCommand("InsertText",false,"mce_marker");f.getBody().innerHTML=f.getBody().innerHTML.replace(/mce_marker/g,f.dom.processHTML(i)+'<span id="_mce_tmp">XX</span>');f.selection.select(f.dom.get("_mce_tmp"));f.getDoc().execCommand("Delete",false," ")});f.onKeyPress.add(function(o,p){var q,v,r,l,j,k,i,u,m,t,s;if(p.keyCode==13){i=o.selection;q=i.getNode();if(p.shiftKey||o.settings.force_br_newlines&&q.nodeName!="LI"){g._insertBR(o);a.cancel(p)}if(v=h.getParent(q,"LI")){r=h.getParent(v,"OL,UL");u=o.getDoc();s=h.create("p");h.add(s,"br",{mce_bogus:"1"});if(e(u,v)){if(k=h.getParent(r.parentNode,"LI,OL,UL")){return}k=h.getParent(r,"p,h1,h2,h3,h4,h5,h6,div")||r;l=u.createRange();l.setStartBefore(k);l.setEndBefore(v);j=u.createRange();j.setStartAfter(v);j.setEndAfter(k);m=l.cloneContents();t=j.cloneContents();if(!e(u,t)){h.insertAfter(t,k)}h.insertAfter(s,k);if(!e(u,m)){h.insertAfter(m,k)}h.remove(k);k=s.firstChild;l=u.createRange();l.setStartBefore(k);l.setEndBefore(k);i.setRng(l);return a.cancel(p)}}}});f.onExecCommand.add(function(i,k){var j,m,n,l;if(k=="InsertUnorderedList"||k=="InsertOrderedList"){j=i.selection;m=i.dom;if(n=m.getParent(j.getNode(),function(o){return/^(H[1-6]|P|ADDRESS|PRE)$/.test(o.nodeName)})){l=j.getBookmark();m.remove(n,1);j.moveToBookmark(l)}}});f.onClick.add(function(i,j){j=j.target;if(j.nodeName=="IMG"){g.selElm=j;i.selection.select(j)}else{g.selElm=null}});f.onInit.add(function(){g._fixWebKitSpans()});f.onSetContent.add(function(){h=f.dom;d(["strong","b","em","u","strike","sub","sup","a"],function(i){d(c(h.select(i)).reverse(),function(l){var k=l.nodeName.toLowerCase(),j;if(k=="a"){if(l.name){h.replace(h.create("img",{mce_name:"a",name:l.name,"class":"mceItemAnchor"}),l)}return}switch(k){case"b":case"strong":if(k=="b"){k="strong"}j="font-weight: bold;";break;case"em":j="font-style: italic;";break;case"u":j="text-decoration: underline;";break;case"sub":j="vertical-align: sub;";break;case"sup":j="vertical-align: super;";break;case"strike":j="text-decoration: line-through;";break}h.replace(h.create("span",{mce_name:k,style:j,"class":"Apple-style-span"}),l,1)})})});f.onPreProcess.add(function(i,j){h=i.dom;d(c(j.node.getElementsByTagName("span")).reverse(),function(m){var k,l;if(j.get){if(h.hasClass(m,"Apple-style-span")){l=m.style.backgroundColor;switch(h.getAttrib(m,"mce_name")){case"font":if(!i.settings.convert_fonts_to_spans){h.setAttrib(m,"style","")}break;case"strong":case"em":case"sub":case"sup":h.setAttrib(m,"style","");break;case"strike":case"u":if(!i.settings.inline_styles){h.setAttrib(m,"style","")}else{h.setAttrib(m,"mce_name","")}break;default:if(!i.settings.inline_styles){h.setAttrib(m,"style","")}}if(l){m.style.backgroundColor=l}}}if(h.hasClass(m,"mceItemRemoved")){h.remove(m,1)}})});f.onPostProcess.add(function(i,j){j.content=j.content.replace(/<br \/><\/(h[1-6]|div|p|address|pre)>/g,"</$1>");j.content=j.content.replace(/ id=\"undefined\"/g,"")})},getInfo:function(){return{longname:"Safari compatibility",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/safari",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_fixWebKitSpans:function(){var g=this,f=g.editor;a.add(f.getDoc(),"DOMNodeInserted",function(h){h=h.target;if(h&&h.nodeType==1){g._fixAppleSpan(h)}})},_fixAppleSpan:function(l){var g=this.editor,m=g.dom,i=this.webKitFontSizes,f=this.namedFontSizes,j=g.settings,h,k;if(m.getAttrib(l,"mce_fixed")){return}if(l.nodeName=="SPAN"&&l.className=="Apple-style-span"){h=l.style;if(!j.convert_fonts_to_spans){if(h.fontSize){m.setAttrib(l,"mce_name","font");m.setAttrib(l,"size",b(i,h.fontSize)+1)}if(h.fontFamily){m.setAttrib(l,"mce_name","font");m.setAttrib(l,"face",h.fontFamily)}if(h.color){m.setAttrib(l,"mce_name","font");m.setAttrib(l,"color",m.toHex(h.color))}if(h.backgroundColor){m.setAttrib(l,"mce_name","font");m.setStyle(l,"background-color",h.backgroundColor)}}else{if(h.fontSize){m.setStyle(l,"fontSize",f[b(i,h.fontSize)])}}if(h.fontWeight=="bold"){m.setAttrib(l,"mce_name","strong")}if(h.fontStyle=="italic"){m.setAttrib(l,"mce_name","em")}if(h.textDecoration=="underline"){m.setAttrib(l,"mce_name","u")}if(h.textDecoration=="line-through"){m.setAttrib(l,"mce_name","strike")}if(h.verticalAlign=="super"){m.setAttrib(l,"mce_name","sup")}if(h.verticalAlign=="sub"){m.setAttrib(l,"mce_name","sub")}m.setAttrib(l,"mce_fixed","1")}},_insertBR:function(f){var j=f.dom,h=f.selection,i=h.getRng(),g;i.insertNode(g=j.create("br"));i.setStartAfter(g);i.setEndAfter(g);h.setRng(i);if(h.getSel().focusNode==g.previousSibling){h.select(j.insertAfter(j.doc.createTextNode("\u00a0"),g));h.collapse(1)}f.getWin().scrollTo(0,j.getPos(h.getRng().startContainer).y)}});tinymce.PluginManager.add("safari",tinymce.plugins.Safari)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js
index 642d659..6667b7c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/safari/editor_plugin_src.js
@@ -6,7 +6,7 @@
6 */ 6 */
7 7
8(function() { 8(function() {
9 var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray, isOldWebKit = tinymce.isOldWebKit; 9 var Event = tinymce.dom.Event, grep = tinymce.grep, each = tinymce.each, inArray = tinymce.inArray;
10 10
11 function isEmpty(d, e, f) { 11 function isEmpty(d, e, f) {
12 var w, n; 12 var w, n;
@@ -55,6 +55,8 @@
55 ed.getDoc().execCommand("CreateLink", false, v); 55 ed.getDoc().execCommand("CreateLink", false, v);
56 }); 56 });
57 57
58/*
59 // WebKit generates spans out of thin air this patch used to remove them but it will also remove styles we want so it's disabled for now
58 ed.onPaste.add(function(ed, e) { 60 ed.onPaste.add(function(ed, e) {
59 function removeStyles(e) { 61 function removeStyles(e) {
60 e = e.target; 62 e = e.target;
@@ -74,7 +76,7 @@
74 Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles); 76 Event.remove(ed.getDoc(), 'DOMNodeInserted', removeStyles);
75 }, 0); 77 }, 0);
76 }); 78 });
77 79*/
78 ed.onKeyUp.add(function(ed, e) { 80 ed.onKeyUp.add(function(ed, e) {
79 var h, b, r, n, s; 81 var h, b, r, n, s;
80 82
@@ -116,6 +118,14 @@
116 ed.selection.select(ed.dom.get('_mce_tmp')); 118 ed.selection.select(ed.dom.get('_mce_tmp'));
117 ed.getDoc().execCommand("Delete", false, ' '); 119 ed.getDoc().execCommand("Delete", false, ' ');
118 }); 120 });
121
122 /* ed.onKeyDown.add(function(ed, e) {
123 // Ctrl+A select all will fail on WebKit since if you paste the contents you selected it will produce a odd div wrapper
124 if ((e.ctrlKey || e.metaKey) && e.keyCode == 65) {
125 ed.selection.select(ed.getBody(), 1);
126 return Event.cancel(e);
127 }
128 });*/
119 129
120 ed.onKeyPress.add(function(ed, e) { 130 ed.onKeyPress.add(function(ed, e) {
121 var se, li, lic, r1, r2, n, sel, doc, be, af, pa; 131 var se, li, lic, r1, r2, n, sel, doc, be, af, pa;
@@ -209,9 +219,6 @@
209 219
210 ed.onInit.add(function() { 220 ed.onInit.add(function() {
211 t._fixWebKitSpans(); 221 t._fixWebKitSpans();
212
213 if (isOldWebKit)
214 t._patchSafari2x(ed);
215 }); 222 });
216 223
217 ed.onSetContent.add(function() { 224 ed.onSetContent.add(function() {
@@ -337,24 +344,13 @@
337 _fixWebKitSpans : function() { 344 _fixWebKitSpans : function() {
338 var t = this, ed = t.editor; 345 var t = this, ed = t.editor;
339 346
340 if (!isOldWebKit) { 347 // Use mutator events on new WebKit
341 // Use mutator events on new WebKit 348 Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) {
342 Event.add(ed.getDoc(), 'DOMNodeInserted', function(e) { 349 e = e.target;
343 e = e.target;
344
345 if (e && e.nodeType == 1)
346 t._fixAppleSpan(e);
347 });
348 } else {
349 // Do post command processing in old WebKit since the browser crashes on Mutator events :(
350 ed.onExecCommand.add(function() {
351 each(ed.dom.select('span'), function(n) {
352 t._fixAppleSpan(n);
353 });
354 350
355 ed.nodeChanged(); 351 if (e && e.nodeType == 1)
356 }); 352 t._fixAppleSpan(e);
357 } 353 });
358 }, 354 },
359 355
360 _fixAppleSpan : function(e) { 356 _fixAppleSpan : function(e) {
@@ -414,78 +410,6 @@
414 } 410 }
415 }, 411 },
416 412
417 _patchSafari2x : function(ed) {
418 var t = this, setContent, getNode, dom = ed.dom, lr;
419
420 // Inline dialogs
421 if (ed.windowManager.onBeforeOpen) {
422 ed.windowManager.onBeforeOpen.add(function() {
423 r = ed.selection.getRng();
424 });
425 }
426
427 // Fake select on 2.x
428 ed.selection.select = function(n) {
429 this.getSel().setBaseAndExtent(n, 0, n, 1);
430 };
431
432 getNode = ed.selection.getNode;
433 ed.selection.getNode = function() {
434 return t.selElm || getNode.call(this);
435 };
436
437 // Fake range on Safari 2.x
438 ed.selection.getRng = function() {
439 var t = this, s = t.getSel(), d = ed.getDoc(), r, rb, ra, di;
440
441 // Fake range on Safari 2.x
442 if (s.anchorNode) {
443 r = d.createRange();
444
445 try {
446 // Setup before range
447 rb = d.createRange();
448 rb.setStart(s.anchorNode, s.anchorOffset);
449 rb.collapse(1);
450
451 // Setup after range
452 ra = d.createRange();
453 ra.setStart(s.focusNode, s.focusOffset);
454 ra.collapse(1);
455
456 // Setup start/end points by comparing locations
457 di = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;
458 r.setStart(di ? s.anchorNode : s.focusNode, di ? s.anchorOffset : s.focusOffset);
459 r.setEnd(di ? s.focusNode : s.anchorNode, di ? s.focusOffset : s.anchorOffset);
460
461 lr = r;
462 } catch (ex) {
463 // Sometimes fails, at least we tried to do it by the book. I hope Safari 2.x will go disappear soooon!!!
464 }
465 }
466
467 return r || lr;
468 };
469
470 // Fix setContent so it works
471 setContent = ed.selection.setContent;
472 ed.selection.setContent = function(h, s) {
473 var r = this.getRng(), b;
474
475 try {
476 setContent.call(this, h, s);
477 } catch (ex) {
478 // Workaround for Safari 2.x
479 b = dom.create('body');
480 b.innerHTML = h;
481
482 each(b.childNodes, function(n) {
483 r.insertNode(n.cloneNode(true));
484 });
485 }
486 };
487 },
488
489 _insertBR : function(ed) { 413 _insertBR : function(ed) {
490 var dom = ed.dom, s = ed.selection, r = s.getRng(), br; 414 var dom = ed.dom, s = ed.selection, r = s.getRng(), br;
491 415
diff --git a/public/javascripts/tiny_mce/plugins/save/editor_plugin.js b/public/javascripts/tiny_mce/plugins/save/editor_plugin.js
index 8a13e7d..8e93996 100755..100644
--- a/public/javascripts/tiny_mce/plugins/save/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/save/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.Save',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceSave',t._save,t);ed.addCommand('mceCancel',t._cancel,t);ed.addButton('save',{title:'save.save_desc',cmd:'mceSave'});ed.addButton('cancel',{title:'save.cancel_desc',cmd:'mceCancel'});ed.onNodeChange.add(t._nodeChange,t);ed.addShortcut('ctrl+s',ed.getLang('save.save_desc'),'mceSave');},getInfo:function(){return{longname:'Save',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_nodeChange:function(ed,cm,n){var ed=this.editor;if(ed.getParam('save_enablewhendirty')){cm.setDisabled('save',!ed.isDirty());cm.setDisabled('cancel',!ed.isDirty());}},_save:function(){var ed=this.editor,formObj,os,i,elementId;formObj=tinymce.DOM.get(ed.id).form||tinymce.DOM.getParent(ed.id,'form');if(ed.getParam("save_enablewhendirty")&&!ed.isDirty())return;tinyMCE.triggerSave();if(os=ed.getParam("save_onsavecallback")){if(ed.execCallback('save_onsavecallback',ed)){ed.startContent=tinymce.trim(ed.getContent({format:'raw'}));ed.nodeChanged();}return;}if(formObj){ed.isNotDirty=true;if(formObj.onsubmit==null||formObj.onsubmit()!=false)formObj.submit();ed.nodeChanged();}else ed.windowManager.alert("Error: No form element found.");},_cancel:function(){var ed=this.editor,os,h=tinymce.trim(ed.startContent);if(os=ed.getParam("save_oncancelcallback")){ed.execCallback('save_oncancelcallback',ed);return;}ed.setContent(h);ed.undoManager.clear();ed.nodeChanged();}});tinymce.PluginManager.add('save',tinymce.plugins.Save);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js
index b38be4d..b38be4d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/save/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css b/public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
index ecdf58c..ecdf58c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
+++ b/public/javascripts/tiny_mce/plugins/searchreplace/css/searchreplace.css
diff --git a/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js b/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js
index 7fd913b..c3f8358 100755..100644
--- a/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin.js
@@ -1 +1 @@
(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);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:160+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.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)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
index 59edc3b..59edc3b 100755..100644
--- a/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/searchreplace/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js b/public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
index a8585cc..a8585cc 100755..100644
--- a/public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
+++ b/public/javascripts/tiny_mce/plugins/searchreplace/js/searchreplace.js
diff --git a/public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
index 370959a..370959a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/searchreplace/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm b/public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm
index 9c95a6a..0b42486 100755..100644
--- a/public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm
+++ b/public/javascripts/tiny_mce/plugins/searchreplace/searchreplace.htm
@@ -7,7 +7,6 @@
7 <script type="text/javascript" src="../../utils/form_utils.js"></script> 7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="js/searchreplace.js"></script> 8 <script type="text/javascript" src="js/searchreplace.js"></script>
9 <link rel="stylesheet" type="text/css" href="css/searchreplace.css" /> 9 <link rel="stylesheet" type="text/css" href="css/searchreplace.css" />
10 <base target="_self" />
11</head> 10</head>
12<body style="display:none;"> 11<body style="display:none;">
13<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#"> 12<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">
diff --git a/public/javascripts/tiny_mce/plugins/spellchecker/css/content.css b/public/javascripts/tiny_mce/plugins/spellchecker/css/content.css
index 24efa02..24efa02 100755..100644
--- a/public/javascripts/tiny_mce/plugins/spellchecker/css/content.css
+++ b/public/javascripts/tiny_mce/plugins/spellchecker/css/content.css
diff --git a/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js b/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js
index 9cb6799..377e4e8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin.js
@@ -1 +1 @@
(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);})(); \ No newline at end of file (function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=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(e,f){var g=this,d;g.url=f;g.editor=e;e.addCommand("mceSpellCheck",function(){if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);e.windowManager.alert("spellchecker.no_mpell")}})}else{g._done()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(f+"/css/content.css")}});e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.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(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={};this._walk(e.getBody(),function(h){if(h.nodeType==3){d+=h.nodeValue+" "}});d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));c(d.split(" "),function(h){if(!f[h]){g.push(h);f[h]=1}});return g},_removeWords:function(e){var f=this.editor,h=f.dom,g=f.selection,d=g.getBookmark();c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!e||h.decode(i.innerHTML)==e){h.remove(i,1)}}});g.moveToBookmark(d)},_markWords:function(o){var i,h,g,f,e,n="",k=this.editor,p=this._getSeparators(),j=k.dom,d=[];var l=k.selection,m=l.getBookmark();c(o,function(q){n+=(n?"|":"")+q});i=new RegExp("(["+p+"])("+n+")(["+p+"])","g");h=new RegExp("^("+n+")","g");g=new RegExp("("+n+")(["+p+"]?)$","g");f=new RegExp("^("+n+")(["+p+"]?)$","g");e=new RegExp("("+n+")(["+p+"])","g");this._walk(this.editor.getBody(),function(q){if(q.nodeType==3){d.push(q)}});c(d,function(r){var q;if(r.nodeType==3){q=r.nodeValue;if(i.test(q)||h.test(q)||g.test(q)||f.test(q)){q=j.encode(q);q=q.replace(e,'<span class="mceItemHiddenSpellWord">$1</span>$2');q=q.replace(g,'<span class="mceItemHiddenSpellWord">$1</span>$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_showMenu:function(g,i){var h=this,g=h.editor,d=h._menu,k,j=g.dom,f=j.getViewPort(g.getWin());if(!d){k=b.getPos(g.getContentAreaContainer());d=g.controlManager.createDropMenu("spellcheckermenu",{offset_x:k.x,offset_y:k.y,"class":"mceNoIcons"});h._menu=d}if(j.hasClass(i.target,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);h._sendRPC("getSuggestions",[h.selectedLang,j.decode(i.target.innerHTML)],function(e){d.removeAll();if(e.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(e,function(l){d.add({title:l,onclick:function(){j.replace(g.getDoc().createTextNode(l),i.target);h._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}d.add({title:"spellchecker.ignore_word",onclick:function(){j.remove(i.target,1);h._checkDone()}});d.add({title:"spellchecker.ignore_words",onclick:function(){h._removeWords(j.decode(i.target.innerHTML));h._checkDone()}});d.update()});g.selection.select(i.target);k=j.getPos(i.target);d.showMenu(k.x,k.y+i.target.offsetHeight-f.y);return tinymce.dom.Event.cancel(i)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,h,d){var g=this,f=g.editor.getParam("spellchecker_rpc_url","{backend}");if(f=="{backend}"){g.editor.setProgressState(0);alert("Please specify: spellchecker_rpc_url");return}a.sendRPC({url:f,method:e,params:h,success:d,error:function(j,i){g.editor.setProgressState(0);g.editor.windowManager.alert(j.errstr||("Error response: "+i.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
index c913c46..c913c46 100755..100644
--- a/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/spellchecker/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif b/public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif
index 7d0a4db..7d0a4db 100755..100644
--- a/public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif
+++ b/public/javascripts/tiny_mce/plugins/spellchecker/img/wline.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/plugins/style/css/props.css b/public/javascripts/tiny_mce/plugins/style/css/props.css
index eb1f264..eb1f264 100755..100644
--- a/public/javascripts/tiny_mce/plugins/style/css/props.css
+++ b/public/javascripts/tiny_mce/plugins/style/css/props.css
diff --git a/public/javascripts/tiny_mce/plugins/style/editor_plugin.js b/public/javascripts/tiny_mce/plugins/style/editor_plugin.js
index 6ebaa91..cab2153 100755..100644
--- a/public/javascripts/tiny_mce/plugins/style/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/style/editor_plugin.js
@@ -1 +1 @@
(function(){tinymce.create('tinymce.plugins.StylePlugin',{init:function(ed,url){ed.addCommand('mceStyleProps',function(){ed.windowManager.open({file:url+'/props.htm',width:480+parseInt(ed.getLang('style.delta_width',0)),height:320+parseInt(ed.getLang('style.delta_height',0)),inline:1},{plugin_url:url,style_text:ed.selection.getNode().style.cssText});});ed.addCommand('mceSetElementStyle',function(ui,v){if(e=ed.selection.getNode()){ed.dom.setAttrib(e,'style',v);ed.execCommand('mceRepaint');}});ed.onNodeChange.add(function(ed,cm,n){cm.setDisabled('styleprops',n.nodeName==='BODY');});ed.addButton('styleprops',{title:'style.desc',cmd:'mceStyleProps'});},getInfo:function(){return{longname:'Style',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style',version:tinymce.majorVersion+"."+tinymce.minorVersion};}});tinymce.PluginManager.add('style',tinymce.plugins.StylePlugin);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js
index 6c817ce..6c817ce 100755..100644
--- a/public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/style/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/style/js/props.js b/public/javascripts/tiny_mce/plugins/style/js/props.js
index cafd6b1..a8dd93d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/style/js/props.js
+++ b/public/javascripts/tiny_mce/plugins/style/js/props.js
@@ -10,9 +10,9 @@ var defaultFonts = "" +
10 "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; 10 "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif";
11 11
12var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; 12var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger";
13var defaultMeasurement = "+pixels=px;points=pt;em;in;cm;mm;picas;ems;exs;%"; 13var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";
14var defaultSpacingMeasurement = "pixels=px;points=pt;in;cm;mm;picas;+ems;exs;%"; 14var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";
15var defaultIndentMeasurement = "pixels=px;+points=pt;in;cm;mm;picas;ems;exs;%"; 15var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";
16var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; 16var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900";
17var defaultTextStyle = "normal;italic;oblique"; 17var defaultTextStyle = "normal;italic;oblique";
18var defaultVariant = "normal;small-caps"; 18var defaultVariant = "normal;small-caps";
@@ -247,12 +247,12 @@ function setupFormData() {
247} 247}
248 248
249function getMeasurement(s) { 249function getMeasurement(s) {
250 return s.replace(/^([0-9]+)(.*)$/, "$2"); 250 return s.replace(/^([0-9.]+)(.*)$/, "$2");
251} 251}
252 252
253function getNum(s) { 253function getNum(s) {
254 if (new RegExp('^[0-9]+[a-z%]+$', 'gi').test(s)) 254 if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s))
255 return s.replace(/[^0-9]/g, ''); 255 return s.replace(/[^0-9.]/g, '');
256 256
257 return s; 257 return s;
258} 258}
@@ -478,7 +478,7 @@ function generateCSS() {
478 ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); 478 ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : "");
479 ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); 479 ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : "");
480 } else 480 } else
481 ce.style.borderWidth = f.border_width_top.value; 481 ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");
482 482
483 if (!f.border_color_same.checked) { 483 if (!f.border_color_same.checked) {
484 ce.style.borderTopColor = f.border_color_top.value; 484 ce.style.borderTopColor = f.border_color_top.value;
diff --git a/public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js
index 5026313..5026313 100755..100644
--- a/public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/style/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/style/props.htm b/public/javascripts/tiny_mce/plugins/style/props.htm
index 54538e3..3a1582c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/style/props.htm
+++ b/public/javascripts/tiny_mce/plugins/style/props.htm
@@ -8,7 +8,6 @@
8 <script type="text/javascript" src="../../utils/form_utils.js"></script> 8 <script type="text/javascript" src="../../utils/form_utils.js"></script>
9 <script type="text/javascript" src="js/props.js"></script> 9 <script type="text/javascript" src="js/props.js"></script>
10 <link href="css/props.css" rel="stylesheet" type="text/css" /> 10 <link href="css/props.css" rel="stylesheet" type="text/css" />
11 <base target="_self" />
12</head> 11</head>
13 12
14<body id="styleprops" style="display: none"> 13<body id="styleprops" style="display: none">
diff --git a/public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js b/public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js
new file mode 100644
index 0000000..7f1fe26
--- /dev/null
+++ b/public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin.js
@@ -0,0 +1 @@
(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m<n.length;m++){if(n[m].type!="hidden"){return n[m]}}}else{for(m=j-1;m>=0;m--){if(n[m].type!="hidden"){return n[m]}}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(l=tinymce.EditorManager.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){window.focus();n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
new file mode 100644
index 0000000..0fa8d81
--- /dev/null
+++ b/public/javascripts/tiny_mce/plugins/tabfocus/editor_plugin_src.js
@@ -0,0 +1,109 @@
1/**
2 * $Id: editor_plugin_src.js 787 2008-04-10 11:40:57Z spocke $
3 *
4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6 */
7
8(function() {
9 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;
10
11 tinymce.create('tinymce.plugins.TabFocusPlugin', {
12 init : function(ed, url) {
13 function tabCancel(ed, e) {
14 if (e.keyCode === 9)
15 return Event.cancel(e);
16 };
17
18 function tabHandler(ed, e) {
19 var x, i, f, el, v;
20
21 function find(d) {
22 f = DOM.getParent(ed.id, 'form');
23 el = f.elements;
24
25 if (f) {
26 each(el, function(e, i) {
27 if (e.id == ed.id) {
28 x = i;
29 return false;
30 }
31 });
32
33 if (d > 0) {
34 for (i = x + 1; i < el.length; i++) {
35 if (el[i].type != 'hidden')
36 return el[i];
37 }
38 } else {
39 for (i = x - 1; i >= 0; i--) {
40 if (el[i].type != 'hidden')
41 return el[i];
42 }
43 }
44 }
45
46 return null;
47 };
48
49 if (e.keyCode === 9) {
50 v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));
51
52 if (v.length == 1) {
53 v[1] = v[0];
54 v[0] = ':prev';
55 }
56
57 // Find element to focus
58 if (e.shiftKey) {
59 if (v[0] == ':prev')
60 el = find(-1);
61 else
62 el = DOM.get(v[0]);
63 } else {
64 if (v[1] == ':next')
65 el = find(1);
66 else
67 el = DOM.get(v[1]);
68 }
69
70 if (el) {
71 if (ed = tinymce.EditorManager.get(el.id || el.name))
72 ed.focus();
73 else
74 window.setTimeout(function() {window.focus();el.focus();}, 10);
75
76 return Event.cancel(e);
77 }
78 }
79 };
80
81 ed.onKeyUp.add(tabCancel);
82
83 if (tinymce.isGecko) {
84 ed.onKeyPress.add(tabHandler);
85 ed.onKeyDown.add(tabCancel);
86 } else
87 ed.onKeyDown.add(tabHandler);
88
89 ed.onInit.add(function() {
90 each(DOM.select('a:first,a:last', ed.getContainer()), function(n) {
91 Event.add(n, 'focus', function() {ed.focus();});
92 });
93 });
94 },
95
96 getInfo : function() {
97 return {
98 longname : 'Tabfocus',
99 author : 'Moxiecode Systems AB',
100 authorurl : 'http://tinymce.moxiecode.com',
101 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',
102 version : tinymce.majorVersion + "." + tinymce.minorVersion
103 };
104 }
105 });
106
107 // Register plugin
108 tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);
109})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/table/cell.htm b/public/javascripts/tiny_mce/plugins/table/cell.htm
index 60264db..1fabc8d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/cell.htm
+++ b/public/javascripts/tiny_mce/plugins/table/cell.htm
@@ -8,7 +8,6 @@
8 <script type="text/javascript" src="../../utils/editable_selects.js"></script> 8 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
9 <script type="text/javascript" src="js/cell.js"></script> 9 <script type="text/javascript" src="js/cell.js"></script>
10 <link href="css/cell.css" rel="stylesheet" type="text/css" /> 10 <link href="css/cell.css" rel="stylesheet" type="text/css" />
11 <base target="_self" />
12</head> 11</head>
13<body id="tablecell" style="display: none"> 12<body id="tablecell" style="display: none">
14 <form onsubmit="updateAction();return false;" action="#"> 13 <form onsubmit="updateAction();return false;" action="#">
diff --git a/public/javascripts/tiny_mce/plugins/table/css/cell.css b/public/javascripts/tiny_mce/plugins/table/css/cell.css
index a067ecd..a067ecd 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/css/cell.css
+++ b/public/javascripts/tiny_mce/plugins/table/css/cell.css
diff --git a/public/javascripts/tiny_mce/plugins/table/css/row.css b/public/javascripts/tiny_mce/plugins/table/css/row.css
index 1f7755d..1f7755d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/css/row.css
+++ b/public/javascripts/tiny_mce/plugins/table/css/row.css
diff --git a/public/javascripts/tiny_mce/plugins/table/css/table.css b/public/javascripts/tiny_mce/plugins/table/css/table.css
index d11c3f6..d11c3f6 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/css/table.css
+++ b/public/javascripts/tiny_mce/plugins/table/css/table.css
diff --git a/public/javascripts/tiny_mce/plugins/table/editor_plugin.js b/public/javascripts/tiny_mce/plugins/table/editor_plugin.js
index 97a9d25..ab10538 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/table/editor_plugin.js
@@ -1 +1 @@
(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]});});if(ed.getParam('inline_styles')){ed.onPreProcess.add(function(ed,o){var dom=ed.dom;each(dom.select('table',o.node),function(n){var v;if(v=dom.getAttrib(n,'width')){dom.setStyle(n,'width',v);dom.setAttrib(n,'width');}if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height');}});});}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')){if(!tinymce.isGecko&&!tinymce.isOpera){tinyMCE.execInstanceCommand(ed.editorId,"mceTableMoveToNextRow",true);return tinymce.dom.Event.cancel(e);}ed.undoManager.add();}});if(!tinymce.isIE){if(ed.getParam('table_selection',true)){ed.onClick.add(function(ed,e){e=e.target;if(e.nodeName==='TABLE')ed.selection.select(e);});}}ed.onNodeChange.add(function(ed,cm,n){var p=ed.dom.getParent(n,'td,th,caption');cm.setActive('table',n.nodeName==='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"mceTableMoveToNextRow":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 getNextCell(table,cell){var cells=[],x=0,i,j,cell,nextCell;for(i=0;i<table.rows.length;i++)for(j=0;j<table.rows[i].cells.length;j++,x++)cells[x]=table.rows[i].cells[j];for(i=0;i<cells.length;i++)if(cells[i]==cell)if(nextCell=cells[i+1])return nextCell;}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"mceTableMoveToNextRow":var nextCell=getNextCell(tableElm,tdElm);if(!nextCell){inst.execCommand("mceTableInsertRowAfter",tdElm);nextCell=getNextCell(tableElm,tdElm);}inst.selection.select(nextCell);inst.selection.collapse(true);return true;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&&tableElm.nodeName=='TBODY'){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(inst.dom.getParent(tableElm,"table"));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(inst.dom.getParent(tableElm,"table"));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)&&tableElm.nodeName=='TBODY'){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"||tdElm.nodeName=="TH")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);})(); \ No newline at end of file (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TablePlugin",{init:function(b,c){var d=this;d.editor=b;d.url=c;a([["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(e){b.addButton(e[0],{title:e[1],cmd:e[2],ui:e[3]})});if(b.getParam("inline_styles")){b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("table",g.node),function(i){var h;if(h=f.getAttrib(i,"width")){f.setStyle(i,"width",h);f.setAttrib(i,"width")}if(h=f.getAttrib(i,"height")){f.setStyle(i,"height",h);f.setAttrib(i,"height")}})})}b.onInit.add(function(){if(!tinymce.isIE&&b.getParam("forced_root_block")){function e(){var f=b.getBody().lastChild;if(f&&f.nodeName=="TABLE"){b.dom.add(b.getBody(),"p",null,'<br mce_bogus="1" />')}}b.onKeyUp.add(e);b.onSetContent.add(e);b.onVisualAid.add(e);b.onPreProcess.add(function(f,h){var g=h.node.lastChild;if(g&&g.childNodes.length==1&&g.firstChild.nodeName=="BR"){f.dom.remove(g)}});e()}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(h,f,j){var k,i=b.selection,g=i.getNode()||b.getBody();if(b.dom.getParent(j,"td")||b.dom.getParent(j,"th")){f.removeAll();if(g.nodeName=="A"&&!b.dom.getAttrib(g,"name")){f.add({title:"advanced.link_desc",icon:"link",cmd:b.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});f.addSeparator()}if(g.nodeName=="IMG"&&g.className.indexOf("mceItem")==-1){f.add({title:"advanced.image_desc",icon:"image",cmd:b.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator()}f.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",ui:true,value:{action:"insert"}});f.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable",ui:true});f.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete",ui:true});f.addSeparator();k=f.addMenu({title:"table.cell"});k.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps",ui:true});k.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells",ui:true});k.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells",ui:true});k=f.addMenu({title:"table.row"});k.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps",ui:true});k.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});k.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});k.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});k.addSeparator();k.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});k.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});k.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"});k.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"});k=f.addMenu({title:"table.col"});k.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});k.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});k.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{f.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",ui:true})}})}});b.onKeyDown.add(function(f,g){if(g.keyCode==9&&f.dom.getParent(f.selection.getNode(),"TABLE")){if(!tinymce.isGecko&&!tinymce.isOpera){tinyMCE.execInstanceCommand(f.editorId,"mceTableMoveToNextRow",true);return tinymce.dom.Event.cancel(g)}f.undoManager.add()}});if(!tinymce.isIE){if(b.getParam("table_selection",true)){b.onClick.add(function(f,g){g=g.target;if(g.nodeName==="TABLE"){f.selection.select(g)}})}}b.onNodeChange.add(function(f,e,h){var g=f.dom.getParent(h,"td,th,caption");e.setActive("table",h.nodeName==="TABLE"||!!g);if(g&&g.nodeName==="CAPTION"){g=null}e.setDisabled("delete_table",!g);e.setDisabled("delete_col",!g);e.setDisabled("delete_table",!g);e.setDisabled("delete_row",!g);e.setDisabled("col_after",!g);e.setDisabled("col_before",!g);e.setDisabled("row_after",!g);e.setDisabled("row_before",!g);e.setDisabled("row_props",!g);e.setDisabled("cell_props",!g);e.setDisabled("split_cells",!g||(parseInt(f.dom.getAttrib(g,"colspan","1"))<2&&parseInt(f.dom.getAttrib(g,"rowspan","1"))<2));e.setDisabled("merge_cells",!g)});if(!tinymce.isIE){b.onBeforeSetContent.add(function(e,f){if(f.initial){f.content=f.content.replace(/<(td|th)([^>]+|)>\s*<\/(td|th)>/g,tinymce.isOpera?"<$1$2>&nbsp;</$1>":'<$1$2><br mce_bogus="1" /></$1>')}})}},execCommand:function(f,e,g){var d=this.editor,c;switch(f){case"mceTableMoveToNextRow":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":d.execCommand("mceBeginUndoLevel");this._doExecCommand(f,e,g);d.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(r,Z,ae){var V=this.editor,au=V,g=this.url;var n=V.selection.getNode();var W=V.dom.getParent(n,"tr");var aq=V.dom.getParent(n,"td,th");var F=V.dom.getParent(n,"table");var k=V.contentWindow.document;var av=F?F.getAttribute("border"):"";if(W&&aq==null){aq=W.cells[0]}function ap(y,x){for(var ax=0;ax<y.length;ax++){if(y[ax].length>0&&ap(y[ax],x)){return true}if(y[ax]==x){return true}}return false}function aj(x,i){var y;ad=e(F);x=x||0;i=i||0;x=Math.max(o.cellindex+x,0);i=Math.max(o.rowindex+i,0);V.execCommand("mceRepaint");y=d(ad,i,x);if(y){V.selection.select(y.firstChild||y);V.selection.collapse(1)}}function ah(){var i=k.createElement("td");if(!tinymce.isIE){i.innerHTML='<br mce_bogus="1"/>'}}function j(y){var x=V.dom.getAttrib(y,"colspan");var i=V.dom.getAttrib(y,"rowspan");x=x==""?1:parseInt(x);i=i==""?1:parseInt(i);return{colspan:x,rowspan:i}}function al(ax,az){var i,ay;for(ay=0;ay<ax.length;ay++){for(i=0;i<ax[ay].length;i++){if(ax[ay][i]==az){return{cellindex:i,rowindex:ay}}}}return null}function d(x,y,i){if(x[y]&&x[y][i]){return x[y][i]}return null}function A(aC,ax){var az=[],y=0,aA,ay,ax,aB;for(aA=0;aA<aC.rows.length;aA++){for(ay=0;ay<aC.rows[aA].cells.length;ay++,y++){az[y]=aC.rows[aA].cells[ay]}}for(aA=0;aA<az.length;aA++){if(az[aA]==ax){if(aB=az[aA+1]){return aB}}}}function e(aE){var i=[],aF=aE.rows,aC,aB,ay,az,aD,ax,aA;for(aB=0;aB<aF.length;aB++){for(aC=0;aC<aF[aB].cells.length;aC++){ay=aF[aB].cells[aC];az=j(ay);for(aD=aC;i[aB]&&i[aB][aD];aD++){}for(aA=aB;aA<aB+az.rowspan;aA++){if(!i[aA]){i[aA]=[]}for(ax=aD;ax<aD+az.colspan;ax++){i[aA][ax]=ay}}}}return i}function m(aG,aD,ay,ax){var y=e(aG),aF=al(y,ay);var aH,aC;if(ax.cells.length!=aD.childNodes.length){aH=aD.childNodes;aC=null;for(var aE=0;ay=d(y,aF.rowindex,aE);aE++){var aA=true;var aB=j(ay);if(ap(aH,ay)){ax.childNodes[aE]._delete=true}else{if((aC==null||ay!=aC)&&aB.colspan>1){for(var az=aE;az<aE+ay.colSpan;az++){ax.childNodes[az]._delete=true}}}if((aC==null||ay!=aC)&&aB.rowspan>1){ay.rowSpan=aB.rowspan+1}aC=ay}B(F)}}function O(x,i){while((x=x.previousSibling)!=null){if(x.nodeName==i){return x}}return null}function af(ax,ay){var x=ay.split(",");while((ax=ax.nextSibling)!=null){for(var y=0;y<x.length;y++){if(ax.nodeName.toLowerCase()==x[y].toLowerCase()){return ax}}}return null}function B(ax){if(ax.rows==0){return}var y=ax.rows[0];do{var x=af(y,"TR");if(y._delete){y.parentNode.removeChild(y);continue}var ay=y.cells[0];if(ay.cells>1){do{var i=af(ay,"TD,TH");if(ay._delete){ay.parentNode.removeChild(ay)}}while((ay=i)!=null)}}while((y=x)!=null)}function p(ax,aA,az){ax.rowSpan=1;var x=af(aA,"TR");for(var ay=1;ay<az&&x;ay++){var y=k.createElement("td");if(!tinymce.isIE){y.innerHTML='<br mce_bogus="1"/>'}if(tinymce.isIE){x.insertBefore(y,x.cells(ax.cellIndex))}else{x.insertBefore(y,x.cells[ax.cellIndex])}x=af(x,"TR")}}function S(aF,aH,aB){var y=e(aH);var ax=aB.cloneNode(false);var aG=al(y,aB.cells[0]);var aC=null;var aA=V.dom.getAttrib(aH,"border");var az=null;for(var aE=0;az=d(y,aG.rowindex,aE);aE++){var aD=null;if(aC!=az){for(var ay=0;ay<aB.cells.length;ay++){if(az==aB.cells[ay]){aD=az.cloneNode(true);break}}}if(aD==null){aD=aF.createElement("td");if(!tinymce.isIE){aD.innerHTML='<br mce_bogus="1"/>'}}aD.colSpan=1;aD.rowSpan=1;ax.appendChild(aD);aC=az}return ax}switch(r){case"mceTableMoveToNextRow":var L=A(F,aq);if(!L){V.execCommand("mceTableInsertRowAfter",aq);L=A(F,aq)}V.selection.select(L);V.selection.collapse(true);return true;case"mceTableRowProps":if(W==null){return true}if(Z){V.windowManager.open({url:g+"/row.htm",width:400+parseInt(V.getLang("table.rowprops_delta_width",0)),height:295+parseInt(V.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:g})}return true;case"mceTableCellProps":if(aq==null){return true}if(Z){V.windowManager.open({url:g+"/cell.htm",width:400+parseInt(V.getLang("table.cellprops_delta_width",0)),height:295+parseInt(V.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:g})}return true;case"mceInsertTable":if(Z){V.windowManager.open({url:g+"/table.htm",width:400+parseInt(V.getLang("table.table_delta_width",0)),height:320+parseInt(V.getLang("table.table_delta_height",0)),inline:1},{plugin_url:g,action:ae?ae.action:0})}return true;case"mceTableDelete":var G=V.dom.getParent(V.selection.getNode(),"table");if(G){G.parentNode.removeChild(G);V.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(!F){return true}if(W&&F!=W.parentNode){F=W.parentNode}if(F&&W){switch(r){case"mceTableCutRow":if(!W||!aq){return true}V.tableRowClipboard=S(k,F,W);V.execCommand("mceTableDeleteRow");break;case"mceTableCopyRow":if(!W||!aq){return true}V.tableRowClipboard=S(k,F,W);break;case"mceTablePasteRowBefore":if(!W||!aq){return true}var v=V.tableRowClipboard.cloneNode(true);var h=O(W,"TR");if(h!=null){m(F,h,h.cells[0],v)}W.parentNode.insertBefore(v,W);break;case"mceTablePasteRowAfter":if(!W||!aq){return true}var X=af(W,"TR");var v=V.tableRowClipboard.cloneNode(true);m(F,W,aq,v);if(X==null){W.parentNode.appendChild(v)}else{X.parentNode.insertBefore(v,X)}break;case"mceTableInsertRowBefore":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);var v=k.createElement("tr");var u=null;o.rowindex--;if(o.rowindex<0){o.rowindex=0}for(var ac=0;aq=d(ad,o.rowindex,ac);ac++){if(aq!=u){var E=j(aq);if(E.rowspan==1){var J=k.createElement("td");if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.colSpan=aq.colSpan;v.appendChild(J)}else{aq.rowSpan=E.rowspan+1}u=aq}}W.parentNode.insertBefore(v,W);aj(0,1);break;case"mceTableInsertRowAfter":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);var v=k.createElement("tr");var u=null;for(var ac=0;aq=d(ad,o.rowindex,ac);ac++){if(aq!=u){var E=j(aq);if(E.rowspan==1){var J=k.createElement("td");if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.colSpan=aq.colSpan;v.appendChild(J)}else{aq.rowSpan=E.rowspan+1}u=aq}}if(v.hasChildNodes()){var X=af(W,"TR");if(X){X.parentNode.insertBefore(v,X)}else{F.appendChild(v)}}aj(0,1);break;case"mceTableDeleteRow":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);if(ad.length==1&&F.nodeName=="TBODY"){V.dom.remove(V.dom.getParent(F,"table"));return true}var D=W.cells;var X=af(W,"TR");for(var ac=0;ac<D.length;ac++){if(D[ac].rowSpan>1){var J=D[ac].cloneNode(true);var E=j(D[ac]);J.rowSpan=E.rowspan-1;var ak=X.cells[ac];if(ak==null){X.appendChild(J)}else{X.insertBefore(J,ak)}}}var u=null;for(var ac=0;aq=d(ad,o.rowindex,ac);ac++){if(aq!=u){var E=j(aq);if(E.rowspan>1){aq.rowSpan=E.rowspan-1}else{W=aq.parentNode;if(W.parentNode){W._delete=true}}u=aq}}B(F);aj(0,-1);break;case"mceTableInsertColBefore":if(!W||!aq){return true}var ad=e(V.dom.getParent(F,"table"));var o=al(ad,aq);var u=null;for(var aa=0;aq=d(ad,aa,o.cellindex);aa++){if(aq!=u){var E=j(aq);if(E.colspan==1){var J=k.createElement(aq.nodeName);if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.rowSpan=aq.rowSpan;aq.parentNode.insertBefore(J,aq)}else{aq.colSpan++}u=aq}}aj();break;case"mceTableInsertColAfter":if(!W||!aq){return true}var ad=e(V.dom.getParent(F,"table"));var o=al(ad,aq);var u=null;for(var aa=0;aq=d(ad,aa,o.cellindex);aa++){if(aq!=u){var E=j(aq);if(E.colspan==1){var J=k.createElement(aq.nodeName);if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}J.rowSpan=aq.rowSpan;var ak=af(aq,"TD,TH");if(ak==null){aq.parentNode.appendChild(J)}else{ak.parentNode.insertBefore(J,ak)}}else{aq.colSpan++}u=aq}}aj(1);break;case"mceTableDeleteCol":if(!W||!aq){return true}var ad=e(F);var o=al(ad,aq);var u=null;if((ad.length>1&&ad[0].length<=1)&&F.nodeName=="TBODY"){V.dom.remove(V.dom.getParent(F,"table"));return true}for(var aa=0;aq=d(ad,aa,o.cellindex);aa++){if(aq!=u){var E=j(aq);if(E.colspan>1){aq.colSpan=E.colspan-1}else{if(aq.parentNode){aq.parentNode.removeChild(aq)}}u=aq}}aj(-1);break;case"mceTableSplitCells":if(!W||!aq){return true}var l=j(aq);var C=l.colspan;var H=l.rowspan;if(C>1||H>1){aq.colSpan=1;for(var am=1;am<C;am++){var J=k.createElement("td");if(!tinymce.isIE){J.innerHTML='<br mce_bogus="1"/>'}W.insertBefore(J,af(aq,"TD,TH"));if(H>1){p(J,W,H)}}p(aq,W,H)}F=V.dom.getParent(V.selection.getNode(),"table");break;case"mceTableMergeCells":var ao=[];var R=V.selection.getSel();var ad=e(F);if(tinymce.isIE||R.rangeCount==1){if(Z){var t=j(aq);V.windowManager.open({url:g+"/merge_cells.htm",width:240+parseInt(V.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(V.getLang("table.merge_cells_delta_height",0)),inline:1},{action:"update",numcols:t.colspan,numrows:t.rowspan,plugin_url:g});return true}else{var U=parseInt(ae.numrows);var c=parseInt(ae.numcols);var o=al(ad,aq);if((""+U)=="NaN"){U=1}if((""+c)=="NaN"){c=1}var b=F.rows;for(var aa=o.rowindex;aa<ad.length;aa++){var ag=[];for(var ac=o.cellindex;ac<ad[aa].length;ac++){var f=d(ad,aa,ac);if(f&&!ap(ao,f)&&!ap(ag,f)){var N=al(ad,f);if(N.cellindex<o.cellindex+c&&N.rowindex<o.rowindex+U){ag[ag.length]=f}}}if(ag.length>0){ao[ao.length]=ag}var f=d(ad,o.rowindex,o.cellindex);a(au.dom.select("br",f),function(y,x){if(x>0&&au.dom.getAttrib("mce_bogus")){au.dom.remove(y)}})}}}else{var D=[];var R=V.selection.getSel();var Y=null;var an=null;var z=-1,aw=-1,w,at;if(R.rangeCount<2){return true}for(var am=0;am<R.rangeCount;am++){var ai=R.getRangeAt(am);var aq=ai.startContainer.childNodes[ai.startOffset];if(!aq){break}if(aq.nodeName=="TD"||aq.nodeName=="TH"){D[D.length]=aq}}var b=F.rows;for(var aa=0;aa<b.length;aa++){var ag=[];for(var ac=0;ac<b[aa].cells.length;ac++){var f=b[aa].cells[ac];for(var am=0;am<D.length;am++){if(f==D[am]){ag[ag.length]=f}}}if(ag.length>0){ao[ao.length]=ag}}var an=[];var Y=null;for(var aa=0;aa<ad.length;aa++){for(var ac=0;ac<ad[aa].length;ac++){ad[aa][ac]._selected=false;for(var am=0;am<D.length;am++){if(ad[aa][ac]==D[am]){if(z==-1){z=ac;aw=aa}w=ac;at=aa;ad[aa][ac]._selected=true}}}}for(var aa=aw;aa<=at;aa++){for(var ac=z;ac<=w;ac++){if(!ad[aa][ac]._selected){alert("Invalid selection for merge.");return true}}}}var s=1,q=1;var T=-1;for(var aa=0;aa<ao.length;aa++){var I=0;for(var ac=0;ac<ao[aa].length;ac++){var E=j(ao[aa][ac]);I+=E.colspan;if(T!=-1&&E.rowspan!=T){alert("Invalid selection for merge.");return true}T=E.rowspan}if(I>q){q=I}T=-1}var Q=-1;for(var ac=0;ac<ao[0].length;ac++){var M=0;for(var aa=0;aa<ao.length;aa++){var E=j(ao[aa][ac]);M+=E.rowspan;if(Q!=-1&&E.colspan!=Q){alert("Invalid selection for merge.");return true}Q=E.colspan}if(M>s){s=M}Q=-1}aq=ao[0][0];aq.rowSpan=s;aq.colSpan=q;for(var aa=0;aa<ao.length;aa++){for(var ac=0;ac<ao[aa].length;ac++){var P=ao[aa][ac].innerHTML;var K=P.replace(/[ \t\r\n]/g,"");if(K!="<br/>"&&K!="<br>"&&K!='<br mce_bogus="1"/>'&&(ac+aa>0)){aq.innerHTML+=P}if(ao[aa][ac]!=aq&&!ao[aa][ac]._deleted){var o=al(ad,ao[aa][ac]);var ar=ao[aa][ac].parentNode;ar.removeChild(ao[aa][ac]);ao[aa][ac]._deleted=true;if(!ar.hasChildNodes()){ar.parentNode.removeChild(ar);var ab=null;for(var ac=0;cellElm=d(ad,o.rowindex,ac);ac++){if(cellElm!=ab&&cellElm.rowSpan>1){cellElm.rowSpan--}ab=cellElm}if(aq.rowSpan>1){aq.rowSpan--}}}}}a(au.dom.select("br",aq),function(y,x){if(x>0&&au.dom.getAttrib(y,"mce_bogus")){au.dom.remove(y)}});break}F=V.dom.getParent(V.selection.getNode(),"table");V.addVisual(F);V.nodeChanged()}return true}return false}});tinymce.PluginManager.add("table",tinymce.plugins.TablePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js
index 80cf748..5e64998 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/table/editor_plugin_src.js
@@ -1,5 +1,5 @@
1/** 1/**
2 * $Id: editor_plugin_src.js 953 2008-11-04 10:16:50Z spocke $ 2 * $Id: editor_plugin_src.js 1206 2009-08-19 12:30:52Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
@@ -55,6 +55,30 @@
55 } 55 }
56 56
57 ed.onInit.add(function() { 57 ed.onInit.add(function() {
58 // Fixes an issue on Gecko where it's impossible to place the caret behind a table
59 // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled
60 if (!tinymce.isIE && ed.getParam('forced_root_block')) {
61 function fixTableCaretPos() {
62 var last = ed.getBody().lastChild;
63
64 if (last && last.nodeName == 'TABLE')
65 ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');
66 };
67
68 ed.onKeyUp.add(fixTableCaretPos);
69 ed.onSetContent.add(fixTableCaretPos);
70 ed.onVisualAid.add(fixTableCaretPos);
71
72 ed.onPreProcess.add(function(ed, o) {
73 var last = o.node.lastChild;
74
75 if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')
76 ed.dom.remove(last);
77 });
78
79 fixTableCaretPos();
80 }
81
58 if (ed && ed.plugins.contextmenu) { 82 if (ed && ed.plugins.contextmenu) {
59 ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) { 83 ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {
60 var sm, se = ed.selection, el = se.getNode() || ed.getBody(); 84 var sm, se = ed.selection, el = se.getNode() || ed.getBody();
diff --git a/public/javascripts/tiny_mce/plugins/table/js/cell.js b/public/javascripts/tiny_mce/plugins/table/js/cell.js
index f23b067..f23b067 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/js/cell.js
+++ b/public/javascripts/tiny_mce/plugins/table/js/cell.js
diff --git a/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js b/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js
index 31d6df0..31d6df0 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js
+++ b/public/javascripts/tiny_mce/plugins/table/js/merge_cells.js
diff --git a/public/javascripts/tiny_mce/plugins/table/js/row.js b/public/javascripts/tiny_mce/plugins/table/js/row.js
index d25f635..d25f635 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/js/row.js
+++ b/public/javascripts/tiny_mce/plugins/table/js/row.js
diff --git a/public/javascripts/tiny_mce/plugins/table/js/table.js b/public/javascripts/tiny_mce/plugins/table/js/table.js
index a7f3c3a..182589d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/js/table.js
+++ b/public/javascripts/tiny_mce/plugins/table/js/table.js
@@ -24,14 +24,14 @@ function insertTable() {
24 border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0; 24 border = formObj.elements['border'].value != "" ? formObj.elements['border'].value : 0;
25 cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : ""; 25 cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";
26 cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : ""; 26 cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";
27 align = formObj.elements['align'].options[formObj.elements['align'].selectedIndex].value; 27 align = getSelectValue(formObj, "align");
28 frame = formObj.elements['frame'].options[formObj.elements['frame'].selectedIndex].value; 28 frame = getSelectValue(formObj, "tframe");
29 rules = formObj.elements['rules'].options[formObj.elements['rules'].selectedIndex].value; 29 rules = getSelectValue(formObj, "rules");
30 width = formObj.elements['width'].value; 30 width = formObj.elements['width'].value;
31 height = formObj.elements['height'].value; 31 height = formObj.elements['height'].value;
32 bordercolor = formObj.elements['bordercolor'].value; 32 bordercolor = formObj.elements['bordercolor'].value;
33 bgcolor = formObj.elements['bgcolor'].value; 33 bgcolor = formObj.elements['bgcolor'].value;
34 className = formObj.elements['class'].options[formObj.elements['class'].selectedIndex].value; 34 className = getSelectValue(formObj, "class");
35 id = formObj.elements['id'].value; 35 id = formObj.elements['id'].value;
36 summary = formObj.elements['summary'].value; 36 summary = formObj.elements['summary'].value;
37 style = formObj.elements['style'].value; 37 style = formObj.elements['style'].value;
@@ -156,6 +156,10 @@ function insertTable() {
156 if (style) 156 if (style)
157 style += '; '; 157 style += '; ';
158 158
159 // Force px
160 if (/^[0-9\.]+$/.test(width))
161 width += 'px';
162
159 style += 'width: ' + width; 163 style += 'width: ' + width;
160 } else 164 } else
161 html += makeAttrib('width', width); 165 html += makeAttrib('width', width);
@@ -203,7 +207,30 @@ function insertTable() {
203 html += "</table>"; 207 html += "</table>";
204 208
205 inst.execCommand('mceBeginUndoLevel'); 209 inst.execCommand('mceBeginUndoLevel');
206 inst.execCommand('mceInsertContent', false, html); 210
211 // Move table
212 if (inst.settings.fix_table_elements) {
213 var bm = inst.selection.getBookmark(), patt = '';
214
215 inst.execCommand('mceInsertContent', false, '<br class="_mce_marker" />');
216
217 tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {
218 if (patt)
219 patt += ',';
220
221 patt += n + ' ._mce_marker';
222 });
223
224 tinymce.each(inst.dom.select(patt), function(n) {
225 inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);
226 });
227
228 dom.setOuterHTML(dom.select('._mce_marker')[0], html);
229
230 inst.selection.moveToBookmark(bm);
231 } else
232 inst.execCommand('mceInsertContent', false, html);
233
207 inst.addVisual(); 234 inst.addVisual();
208 inst.execCommand('mceEndUndoLevel'); 235 inst.execCommand('mceEndUndoLevel');
209 236
@@ -295,7 +322,7 @@ function init() {
295 322
296 // Update form 323 // Update form
297 selectByValue(formObj, 'align', align); 324 selectByValue(formObj, 'align', align);
298 selectByValue(formObj, 'frame', frame); 325 selectByValue(formObj, 'tframe', frame);
299 selectByValue(formObj, 'rules', rules); 326 selectByValue(formObj, 'rules', rules);
300 selectByValue(formObj, 'class', className, true, true); 327 selectByValue(formObj, 'class', className, true, true);
301 formObj.cols.value = cols; 328 formObj.cols.value = cols;
diff --git a/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js
index 000332a..000332a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/table/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/table/merge_cells.htm b/public/javascripts/tiny_mce/plugins/table/merge_cells.htm
index 9d34a88..25d42eb 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/merge_cells.htm
+++ b/public/javascripts/tiny_mce/plugins/table/merge_cells.htm
@@ -6,9 +6,8 @@
6 <script type="text/javascript" src="../../utils/mctabs.js"></script> 6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="../../utils/validate.js"></script> 7 <script type="text/javascript" src="../../utils/validate.js"></script>
8 <script type="text/javascript" src="js/merge_cells.js"></script> 8 <script type="text/javascript" src="js/merge_cells.js"></script>
9 <base target="_self" />
10</head> 9</head>
11<body style="margin: 8px" style="display: none"> 10<body style="margin: 8px">
12<form onsubmit="mergeCells();return false;" action="#"> 11<form onsubmit="mergeCells();return false;" action="#">
13 <fieldset> 12 <fieldset>
14 <legend>{#table_dlg.merge_cells_title}</legend> 13 <legend>{#table_dlg.merge_cells_title}</legend>
diff --git a/public/javascripts/tiny_mce/plugins/table/row.htm b/public/javascripts/tiny_mce/plugins/table/row.htm
index fe75bf6..07ca13c 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/row.htm
+++ b/public/javascripts/tiny_mce/plugins/table/row.htm
@@ -8,10 +8,9 @@
8 <script type="text/javascript" src="../../utils/editable_selects.js"></script> 8 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
9 <script type="text/javascript" src="js/row.js"></script> 9 <script type="text/javascript" src="js/row.js"></script>
10 <link href="css/row.css" rel="stylesheet" type="text/css" /> 10 <link href="css/row.css" rel="stylesheet" type="text/css" />
11 <base target="_self" />
12</head> 11</head>
13<body id="tablerow" style="display: none"> 12<body id="tablerow" style="display: none">
14 <form onsubmit="updateAction();return false;"> 13 <form onsubmit="updateAction();return false;" action="#">
15 <div class="tabs"> 14 <div class="tabs">
16 <ul> 15 <ul>
17 <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> 16 <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>
diff --git a/public/javascripts/tiny_mce/plugins/table/table.htm b/public/javascripts/tiny_mce/plugins/table/table.htm
index 75136e6..37e6159 100755..100644
--- a/public/javascripts/tiny_mce/plugins/table/table.htm
+++ b/public/javascripts/tiny_mce/plugins/table/table.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="../../utils/editable_selects.js"></script> 9 <script type="text/javascript" src="../../utils/editable_selects.js"></script>
10 <script type="text/javascript" src="js/table.js"></script> 10 <script type="text/javascript" src="js/table.js"></script>
11 <link href="css/table.css" rel="stylesheet" type="text/css" /> 11 <link href="css/table.css" rel="stylesheet" type="text/css" />
12 <base target="_self" />
13</head> 12</head>
14<body id="table" style="display: none"> 13<body id="table" style="display: none">
15 <form onsubmit="insertTable();return false;" action="#"> 14 <form onsubmit="insertTable();return false;" action="#">
@@ -58,7 +57,7 @@
58 <td><label id="classlabel" for="class">{#class_name}</label></td> 57 <td><label id="classlabel" for="class">{#class_name}</label></td>
59 <td colspan="3"> 58 <td colspan="3">
60 <select id="class" name="class" class="mceEditableSelect"> 59 <select id="class" name="class" class="mceEditableSelect">
61 <option value="" selected>{#not_set}</option> 60 <option value="" selected="selected">{#not_set}</option>
62 </select></td> 61 </select></td>
63 </tr> 62 </tr>
64 <tr> 63 <tr>
@@ -109,9 +108,9 @@
109 </tr> 108 </tr>
110 109
111 <tr> 110 <tr>
112 <td class="column1"><label for="frame">{#table_dlg.frame}</label></td> 111 <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td>
113 <td> 112 <td>
114 <select id="frame" name="frame" class="advfield"> 113 <select id="tframe" name="tframe" class="advfield">
115 <option value="">{#not_set}</option> 114 <option value="">{#not_set}</option>
116 <option value="void">{#table_dlg.rules_void}</option> 115 <option value="void">{#table_dlg.rules_void}</option>
117 <option value="above">{#table_dlg.rules_above}</option> 116 <option value="above">{#table_dlg.rules_above}</option>
diff --git a/public/javascripts/tiny_mce/plugins/template/blank.htm b/public/javascripts/tiny_mce/plugins/template/blank.htm
index ecde53f..ecde53f 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/blank.htm
+++ b/public/javascripts/tiny_mce/plugins/template/blank.htm
diff --git a/public/javascripts/tiny_mce/plugins/template/css/template.css b/public/javascripts/tiny_mce/plugins/template/css/template.css
index 2d23a49..2d23a49 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/css/template.css
+++ b/public/javascripts/tiny_mce/plugins/template/css/template.css
diff --git a/public/javascripts/tiny_mce/plugins/template/editor_plugin.js b/public/javascripts/tiny_mce/plugins/template/editor_plugin.js
index 0f7fb01..11ee592 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/template/editor_plugin.js
@@ -1 +1 @@
(function(){var each=tinymce.each;tinymce.create('tinymce.plugins.TemplatePlugin',{init:function(ed,url){var t=this;t.editor=ed;ed.addCommand('mceTemplate',function(ui){ed.windowManager.open({file:url+'/template.htm',width:ed.getParam('template_popup_width',750),height:ed.getParam('template_popup_height',600),inline:1},{plugin_url:url});});ed.addCommand('mceInsertTemplate',t._insertTemplate,t);ed.addButton('template',{title:'template.desc',cmd:'mceTemplate'});ed.onPreProcess.add(function(ed,o){var dom=ed.dom;each(dom.select('div',o.node),function(e){if(dom.hasClass(e,'mceTmpl')){each(dom.select('*',e),function(e){if(dom.hasClass(e,ed.getParam('template_mdate_classes','mdate').replace(/\s+/g,'|')))e.innerHTML=t._getDateTime(new Date(),ed.getParam("template_mdate_format",ed.getLang("template.mdate_format")));});t._replaceVals(e);}});});},getInfo:function(){return{longname:'Template plugin',author:'Moxiecode Systems AB',authorurl:'http://www.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template',version:tinymce.majorVersion+"."+tinymce.minorVersion};},_insertTemplate:function(ui,v){var t=this,ed=t.editor,h,el,dom=ed.dom,sel=ed.selection.getContent();h=v.content;each(t.editor.getParam('template_replace_values'),function(v,k){if(typeof(v)!='function')h=h.replace(new RegExp('\\{\\$'+k+'\\}','g'),v);});el=dom.create('div',null,h);n=dom.select('.mceTmpl',el);if(n&&n.length>0){el=dom.create('div',null);el.appendChild(n[0].cloneNode(true));}function hasClass(n,c){return new RegExp('\\b'+c+'\\b','g').test(n.className);};each(dom.select('*',el),function(n){if(hasClass(n,ed.getParam('template_cdate_classes','cdate').replace(/\s+/g,'|')))n.innerHTML=t._getDateTime(new Date(),ed.getParam("template_cdate_format",ed.getLang("template.cdate_format")));if(hasClass(n,ed.getParam('template_mdate_classes','mdate').replace(/\s+/g,'|')))n.innerHTML=t._getDateTime(new Date(),ed.getParam("template_mdate_format",ed.getLang("template.mdate_format")));if(hasClass(n,ed.getParam('template_selected_content_classes','selcontent').replace(/\s+/g,'|')))n.innerHTML=sel;});t._replaceVals(el);ed.execCommand('mceInsertContent',false,el.innerHTML);ed.addVisual();},_replaceVals:function(e){var dom=this.editor.dom,vl=this.editor.getParam('template_replace_values');each(dom.select('*',e),function(e){each(vl,function(v,k){if(dom.hasClass(e,k)){if(typeof(vl[k])=='function')vl[k](e);}});});},_getDateTime:function(d,fmt){if(!fmt)return"";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;}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("%B",""+tinyMCE.getLang("template_months_long").split(',')[d.getMonth()]);fmt=fmt.replace("%b",""+tinyMCE.getLang("template_months_short").split(',')[d.getMonth()]);fmt=fmt.replace("%A",""+tinyMCE.getLang("template_day_long").split(',')[d.getDay()]);fmt=fmt.replace("%a",""+tinyMCE.getLang("template_day_short").split(',')[d.getDay()]);fmt=fmt.replace("%%","%");return fmt;}});tinymce.PluginManager.add('template',tinymce.plugins.TemplatePlugin);})(); \ No newline at end of file (function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length<d){for(f=0;f<(d-g.length);f++){g="0"+g}}return g}b=b.replace("%D","%m/%d/%y");b=b.replace("%r","%I:%M:%S %p");b=b.replace("%Y",""+e.getFullYear());b=b.replace("%y",""+e.getYear());b=b.replace("%m",c(e.getMonth()+1,2));b=b.replace("%d",c(e.getDate(),2));b=b.replace("%H",""+c(e.getHours(),2));b=b.replace("%M",""+c(e.getMinutes(),2));b=b.replace("%S",""+c(e.getSeconds(),2));b=b.replace("%I",""+((e.getHours()+11)%12+1));b=b.replace("%p",""+(e.getHours()<12?"AM":"PM"));b=b.replace("%B",""+tinyMCE.getLang("template_months_long").split(",")[e.getMonth()]);b=b.replace("%b",""+tinyMCE.getLang("template_months_short").split(",")[e.getMonth()]);b=b.replace("%A",""+tinyMCE.getLang("template_day_long").split(",")[e.getDay()]);b=b.replace("%a",""+tinyMCE.getLang("template_day_short").split(",")[e.getDay()]);b=b.replace("%%","%");return b}});tinymce.PluginManager.add("template",tinymce.plugins.TemplatePlugin)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js
index 73ab39e..73ab39e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/template/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/template/js/template.js b/public/javascripts/tiny_mce/plugins/template/js/template.js
index 24045d7..24045d7 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/js/template.js
+++ b/public/javascripts/tiny_mce/plugins/template/js/template.js
diff --git a/public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js
index 2471c3f..2471c3f 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/template/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/plugins/template/template.htm b/public/javascripts/tiny_mce/plugins/template/template.htm
index 2b71c6e..f7bb044 100755..100644
--- a/public/javascripts/tiny_mce/plugins/template/template.htm
+++ b/public/javascripts/tiny_mce/plugins/template/template.htm
@@ -4,7 +4,6 @@
4 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 4 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
5 <script type="text/javascript" src="js/template.js"></script> 5 <script type="text/javascript" src="js/template.js"></script>
6 <link href="css/template.css" rel="stylesheet" type="text/css" /> 6 <link href="css/template.css" rel="stylesheet" type="text/css" />
7 <base target="_self" />
8</head> 7</head>
9<body onresize="TemplateDialog.resize();"> 8<body onresize="TemplateDialog.resize();">
10 <form onsubmit="TemplateDialog.insert();return false;"> 9 <form onsubmit="TemplateDialog.insert();return false;">
diff --git a/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js b/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js
index e1e4238..53d31c4 100755..100644
--- a/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin.js
@@ -1 +1 @@
(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);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state){c.state=true;c._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 m=this,g=m.editor,a,e,f,k=g.getDoc(),l=g.getBody(),j,n=g.selection,c;m.state=!m.state;g.controlManager.setActive("visualchars",m.state);if(m.state){a=[];tinymce.walk(l,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(e=0;e<a.length;e++){j=a[e].nodeValue;j=j.replace(/(\u00a0+)/g,'<span class="mceItemHidden mceVisualNbsp">$1</span>');j=j.replace(/\u00a0/g,"\u00b7");g.dom.setOuterHTML(a[e],j,k)}}else{a=tinymce.grep(g.dom.select("span",l),function(b){return g.dom.hasClass(b,"mceVisualNbsp")});for(e=0;e<a.length;e++){g.dom.setOuterHTML(a[e],a[e].innerHTML.replace(/(&middot;|\u00b7)/g,"&nbsp;"),k)}}}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
index 02ec4e6..02ec4e6 100755..100644
--- a/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/visualchars/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js b/public/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js
new file mode 100644
index 0000000..f192835
--- /dev/null
+++ b/public/javascripts/tiny_mce/plugins/wordcount/editor_plugin.js
@@ -0,0 +1 @@
(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$¿'"_+=\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'<span id="'+c.id+'">0</span>')}}else{tinymce.DOM.add(h,"span",{},'<span id="'+c.id+'">0</span>')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
new file mode 100644
index 0000000..41b78a9
--- /dev/null
+++ b/public/javascripts/tiny_mce/plugins/wordcount/editor_plugin_src.js
@@ -0,0 +1,95 @@
1/**
2 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
3 *
4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6 */
7
8(function() {
9 tinymce.create('tinymce.plugins.WordCount', {
10 block : 0,
11 id : null,
12 countre : null,
13 cleanre : null,
14
15 init : function(ed, url) {
16 var t = this, last = 0;
17
18 t.countre = ed.getParam('wordcount_countregex', /\S\s+/g);
19 t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$¿'"_+=\\/-]*/g);
20 t.id = ed.id + '-word-count';
21
22 ed.onPostRender.add(function(ed, cm) {
23 var row, id;
24
25 // Add it to the specified id or the theme advanced path
26 id = ed.getParam('wordcount_target_id');
27 if (!id) {
28 row = tinymce.DOM.get(ed.id + '_path_row');
29
30 if (row)
31 tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');
32 } else
33 tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');
34 });
35
36 ed.onInit.add(function(ed) {
37 ed.selection.onSetContent.add(function() {
38 t._count(ed);
39 });
40
41 t._count(ed);
42 });
43
44 ed.onSetContent.add(function(ed) {
45 t._count(ed);
46 });
47
48 ed.onKeyUp.add(function(ed, e) {
49 if (e.keyCode == last)
50 return;
51
52 if (13 == e.keyCode || 8 == last || 46 == last)
53 t._count(ed);
54
55 last = e.keyCode;
56 });
57 },
58
59 _count : function(ed) {
60 var t = this, tc = 0;
61
62 // Keep multiple calls from happening at the same time
63 if (t.block)
64 return;
65
66 t.block = 1;
67
68 setTimeout(function() {
69 var tx = ed.getContent({format : 'raw'});
70
71 if (tx) {
72 tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' '); // remove html tags and space chars
73 tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation
74 tx.replace(t.countre, function() {tc++;}); // count the words
75 }
76
77 tinymce.DOM.setHTML(t.id, tc.toString());
78
79 setTimeout(function() {t.block = 0;}, 2000);
80 }, 1);
81 },
82
83 getInfo: function() {
84 return {
85 longname : 'Word Count plugin',
86 author : 'Moxiecode Systems AB',
87 authorurl : 'http://tinymce.moxiecode.com',
88 infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount',
89 version : tinymce.majorVersion + "." + tinymce.minorVersion
90 };
91 }
92 });
93
94 tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount);
95})();
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm b/public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
index 5800284..3928a17 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/abbr.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="js/element_common.js"></script> 9 <script type="text/javascript" src="js/element_common.js"></script>
10 <script type="text/javascript" src="js/abbr.js"></script> 10 <script type="text/javascript" src="js/abbr.js"></script>
11 <link rel="stylesheet" type="text/css" href="css/popup.css" /> 11 <link rel="stylesheet" type="text/css" href="css/popup.css" />
12 <base target="_self" />
13</head> 12</head>
14<body style="display: none"> 13<body style="display: none">
15<form onsubmit="insertAbbr();return false;" action="#"> 14<form onsubmit="insertAbbr();return false;" action="#">
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm b/public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
index 54e4c9d..4d4ebaa 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/acronym.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="js/element_common.js"></script> 9 <script type="text/javascript" src="js/element_common.js"></script>
10 <script type="text/javascript" src="js/acronym.js"></script> 10 <script type="text/javascript" src="js/acronym.js"></script>
11 <link rel="stylesheet" type="text/css" href="css/popup.css" /> 11 <link rel="stylesheet" type="text/css" href="css/popup.css" />
12 <base target="_self" />
13</head> 12</head>
14<body style="display: none"> 13<body style="display: none">
15<form onsubmit="insertAcronym();return false;" action="#"> 14<form onsubmit="insertAcronym();return false;" action="#">
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm b/public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
index cfbb409..322b468 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/attributes.htm
@@ -8,7 +8,6 @@
8 <script type="text/javascript" src="../../utils/form_utils.js"></script> 8 <script type="text/javascript" src="../../utils/form_utils.js"></script>
9 <script type="text/javascript" src="js/attributes.js"></script> 9 <script type="text/javascript" src="js/attributes.js"></script>
10 <link rel="stylesheet" type="text/css" href="css/attributes.css" /> 10 <link rel="stylesheet" type="text/css" href="css/attributes.css" />
11 <base target="_self" />
12</head> 11</head>
13<body style="display: none"> 12<body style="display: none">
14<form onsubmit="insertAction();return false;" action="#"> 13<form onsubmit="insertAction();return false;" action="#">
@@ -36,12 +35,12 @@
36 <td><label id="classlabel" for="classlist">{#class_name}</label></td> 35 <td><label id="classlabel" for="classlist">{#class_name}</label></td>
37 <td> 36 <td>
38 <select id="classlist" name="classlist" class="mceEditableSelect"> 37 <select id="classlist" name="classlist" class="mceEditableSelect">
39 <option value="" selected>{#not_set}</option> 38 <option value="" selected="selected">{#not_set}</option>
40 </select> 39 </select>
41 </td> 40 </td>
42 </tr> 41 </tr>
43 <tr> 42 <tr>
44 <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> 43 <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td>
45 <td><input id="style" name="style" type="text" value="" /></td> 44 <td><input id="style" name="style" type="text" value="" /></td>
46 </tr> 45 </tr>
47 <tr> 46 <tr>
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm b/public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm
index 7d9eaba..cdfaf4e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/cite.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="js/element_common.js"></script> 9 <script type="text/javascript" src="js/element_common.js"></script>
10 <script type="text/javascript" src="js/cite.js"></script> 10 <script type="text/javascript" src="js/cite.js"></script>
11 <link rel="stylesheet" type="text/css" href="css/popup.css" /> 11 <link rel="stylesheet" type="text/css" href="css/popup.css" />
12 <base target="_self" />
13</head> 12</head>
14<body style="display: none"> 13<body style="display: none">
15<form onsubmit="insertCite();return false;" action="#"> 14<form onsubmit="insertCite();return false;" action="#">
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css b/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
index 9a6a235..9a6a235 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/attributes.css
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css b/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
index e67114d..e67114d 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/css/popup.css
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm b/public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm
index d03c456..f45676e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/del.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="js/element_common.js"></script> 9 <script type="text/javascript" src="js/element_common.js"></script>
10 <script type="text/javascript" src="js/del.js"></script> 10 <script type="text/javascript" src="js/del.js"></script>
11 <link rel="stylesheet" type="text/css" href="css/popup.css" /> 11 <link rel="stylesheet" type="text/css" href="css/popup.css" />
12 <base target="_self" />
13</head> 12</head>
14<body id="xhtmlxtrasins" style="display: none"> 13<body id="xhtmlxtrasins" style="display: none">
15<form onsubmit="insertDel();return false;" action="#"> 14<form onsubmit="insertDel();return false;" action="#">
@@ -31,7 +30,7 @@
31 <table border="0" cellspacing="0" cellpadding="0"> 30 <table border="0" cellspacing="0" cellpadding="0">
32 <tr> 31 <tr>
33 <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> 32 <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td>
34 <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> 33 <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>
35 </tr> 34 </tr>
36 </table> 35 </table>
37 </td> 36 </td>
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
index 00c178e..8c7f48e 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin.js
@@ -1 +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');cm.setActive('cite',0);cm.setActive('acronym',0);cm.setActive('abbr',0);cm.setActive('del',0);cm.setActive('ins',0);if(n){do{cm.setDisabled(n.nodeName.toLowerCase(),0);cm.setActive(n.nodeName.toLowerCase(),1);}while(n=n.parentNode);}});},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);})(); \ No newline at end of file (function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(b,c){b.addCommand("mceCite",function(){b.windowManager.open({file:c+"/cite.htm",width:350+parseInt(b.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(b.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:c})});b.addCommand("mceAcronym",function(){b.windowManager.open({file:c+"/acronym.htm",width:350+parseInt(b.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(b.getLang("xhtmlxtras.acronym_delta_width",0)),inline:1},{plugin_url:c})});b.addCommand("mceAbbr",function(){b.windowManager.open({file:c+"/abbr.htm",width:350+parseInt(b.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(b.getLang("xhtmlxtras.abbr_delta_width",0)),inline:1},{plugin_url:c})});b.addCommand("mceDel",function(){b.windowManager.open({file:c+"/del.htm",width:340+parseInt(b.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(b.getLang("xhtmlxtras.del_delta_width",0)),inline:1},{plugin_url:c})});b.addCommand("mceIns",function(){b.windowManager.open({file:c+"/ins.htm",width:340+parseInt(b.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(b.getLang("xhtmlxtras.ins_delta_width",0)),inline:1},{plugin_url:c})});b.addCommand("mceAttributes",function(){b.windowManager.open({file:c+"/attributes.htm",width:380,height:370,inline:1},{plugin_url:c})});b.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});b.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});b.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});b.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});b.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});b.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});if(tinymce.isIE){function a(d,e){if(e.set){e.content=e.content.replace(/<abbr([^>]+)>/gi,"<html:abbr $1>");e.content=e.content.replace(/<\/abbr>/gi,"</html:abbr>")}}b.onBeforeSetContent.add(a);b.onPostProcess.add(a)}b.onNodeChange.add(function(e,d,g,f){g=e.dom.getParent(g,"CITE,ACRONYM,ABBR,DEL,INS");d.setDisabled("cite",f);d.setDisabled("acronym",f);d.setDisabled("abbr",f);d.setDisabled("del",f);d.setDisabled("ins",f);d.setDisabled("attribs",g&&g.nodeName=="BODY");d.setActive("cite",0);d.setActive("acronym",0);d.setActive("abbr",0);d.setActive("del",0);d.setActive("ins",0);if(g){do{d.setDisabled(g.nodeName.toLowerCase(),0);d.setActive(g.nodeName.toLowerCase(),1)}while(g=g.parentNode)}})},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)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
index bef06f2..bef06f2 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/editor_plugin_src.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm b/public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm
index c0f056f..9fa21c4 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/ins.htm
@@ -9,7 +9,6 @@
9 <script type="text/javascript" src="js/element_common.js"></script> 9 <script type="text/javascript" src="js/element_common.js"></script>
10 <script type="text/javascript" src="js/ins.js"></script> 10 <script type="text/javascript" src="js/ins.js"></script>
11 <link rel="stylesheet" type="text/css" href="css/popup.css" /> 11 <link rel="stylesheet" type="text/css" href="css/popup.css" />
12 <base target="_self" />
13</head> 12</head>
14<body id="xhtmlxtrasins" style="display: none"> 13<body id="xhtmlxtrasins" style="display: none">
15<form onsubmit="insertIns();return false;" action="#"> 14<form onsubmit="insertIns();return false;" action="#">
@@ -31,7 +30,7 @@
31 <table border="0" cellspacing="0" cellpadding="0"> 30 <table border="0" cellspacing="0" cellpadding="0">
32 <tr> 31 <tr>
33 <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> 32 <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td>
34 <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> 33 <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>
35 </tr> 34 </tr>
36 </table> 35 </table>
37 </td> 36 </td>
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
index e84b6a8..e84b6a8 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/abbr.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
index 933d122..933d122 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/acronym.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
index 23c7fa4..23c7fa4 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/attributes.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
index c36f7fd..c36f7fd 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/cite.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js
index 7049f2b..7049f2b 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/del.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
index 5cdeb21..70f168a 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/element_common.js
@@ -224,7 +224,7 @@ function insertInlineElement(en) {
224 var ed = tinyMCEPopup.editor, dom = ed.dom; 224 var ed = tinyMCEPopup.editor, dom = ed.dom;
225 225
226 ed.getDoc().execCommand('FontName', false, 'mceinline'); 226 ed.getDoc().execCommand('FontName', false, 'mceinline');
227 tinymce.each(dom.select(tinymce.isWebKit ? 'span' : 'font'), function(n) { 227 tinymce.each(dom.select('span,font'), function(n) {
228 if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') 228 if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')
229 dom.replace(dom.create(en, {_mce_new : 1}), n, 1); 229 dom.replace(dom.create(en, {_mce_new : 1}), n, 1);
230 }); 230 });
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
index 4fcc998..4fcc998 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/js/ins.js
diff --git a/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js b/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
index 45b6b26..45b6b26 100755..100644
--- a/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/plugins/xhtmlxtras/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/about.htm b/public/javascripts/tiny_mce/themes/advanced/about.htm
index 4ef2a29..e5df7aa 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/about.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/about.htm
@@ -1,4 +1,4 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml"> 2<html xmlns="http://www.w3.org/1999/xhtml">
3<head> 3<head>
4 <title>{#advanced_dlg.about_title}</title> 4 <title>{#advanced_dlg.about_title}</title>
diff --git a/public/javascripts/tiny_mce/themes/advanced/anchor.htm b/public/javascripts/tiny_mce/themes/advanced/anchor.htm
index 9e4c0b9..42095a1 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/anchor.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/anchor.htm
@@ -4,7 +4,6 @@
4 <title>{#advanced_dlg.anchor_title}</title> 4 <title>{#advanced_dlg.anchor_title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="js/anchor.js"></script> 6 <script type="text/javascript" src="js/anchor.js"></script>
7 <base target="_self" />
8</head> 7</head>
9<body style="display: none"> 8<body style="display: none">
10<form onsubmit="AnchorDialog.update();return false;" action="#"> 9<form onsubmit="AnchorDialog.update();return false;" action="#">
@@ -13,7 +12,7 @@
13 <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td> 12 <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>
14 </tr> 13 </tr>
15 <tr> 14 <tr>
16 <td nowrap="nowrap">{#advanced_dlg.anchor_name}:</td> 15 <td class="nowrap">{#advanced_dlg.anchor_name}:</td>
17 <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td> 16 <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>
18 </tr> 17 </tr>
19 </table> 18 </table>
diff --git a/public/javascripts/tiny_mce/themes/advanced/charmap.htm b/public/javascripts/tiny_mce/themes/advanced/charmap.htm
index e4c7344..f11a38a 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/charmap.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/charmap.htm
@@ -1,11 +1,10 @@
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml"> 2<html xmlns="http://www.w3.org/1999/xhtml">
3<head> 3<head>
4 <title>{#advanced_dlg.charmap_title}</title> 4 <title>{#advanced_dlg.charmap_title}</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /> 5 <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
6 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 6 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
7 <script type="text/javascript" src="js/charmap.js"></script> 7 <script type="text/javascript" src="js/charmap.js"></script>
8 <base target="_self" />
9</head> 8</head>
10<body id="charmap" style="display:none"> 9<body id="charmap" style="display:none">
11<table align="center" border="0" cellspacing="0" cellpadding="2"> 10<table align="center" border="0" cellspacing="0" cellpadding="2">
diff --git a/public/javascripts/tiny_mce/themes/advanced/color_picker.htm b/public/javascripts/tiny_mce/themes/advanced/color_picker.htm
index a8f297c..cbd6b88 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/color_picker.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/color_picker.htm
@@ -5,7 +5,6 @@
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="../../utils/mctabs.js"></script> 6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="js/color_picker.js"></script> 7 <script type="text/javascript" src="js/color_picker.js"></script>
8 <base target="_self" />
9</head> 8</head>
10<body id="colorpicker" style="display: none"> 9<body id="colorpicker" style="display: none">
11<form onsubmit="insertAction();return false" action="#"> 10<form onsubmit="insertAction();return false" action="#">
@@ -22,7 +21,7 @@
22 <fieldset> 21 <fieldset>
23 <legend>{#advanced_dlg.colorpicker_picker_title}</legend> 22 <legend>{#advanced_dlg.colorpicker_picker_title}</legend>
24 <div id="picker"> 23 <div id="picker">
25 <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;" /> 24 <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;" alt="" />
26 25
27 <div id="light"> 26 <div id="light">
28 <!-- Will be filled with divs --> 27 <!-- Will be filled with divs -->
diff --git a/public/javascripts/tiny_mce/themes/advanced/editor_template.js b/public/javascripts/tiny_mce/themes/advanced/editor_template.js
index d72d542..628c793 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/editor_template.js
+++ b/public/javascripts/tiny_mce/themes/advanced/editor_template.js
@@ -1 +1 @@
(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',{sizes:[8,10,12,14,18,24,36],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,o;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_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:ed.settings.readonly},ed.settings);if(!s.font_size_style_values)s.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt";if(tinymce.is(s.theme_advanced_font_sizes,'string')){s.font_size_style_values=tinymce.explode(s.font_size_style_values);s.font_size_classes=tinymce.explode(s.font_size_classes||'');o={};ed.settings.theme_advanced_font_sizes=s.theme_advanced_font_sizes;each(ed.getParam('theme_advanced_font_sizes','','hash'),function(v,k){var cl;if(k==v&&v>=1&&v<=7){k=v+' ('+t.sizes[v-1]+'pt)';if(ed.settings.convert_fonts_to_spans){cl=s.font_size_classes[v-1];v=s.font_size_style_values[v-1]||(t.sizes[v-1]+'pt');}}if(/\s*\./.test(v))cl=v.replace(/\./g,'');o[k]=cl?{'class':cl}:{fontSize:v};});s.theme_advanced_font_sizes=o;}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(s.editor_css?ed.documentBaseURI.toAbsolute(s.editor_css):url+"/skins/"+ed.settings.skin+"/ui.css");if(s.skin_variant)DOM.loadCSS(url+"/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(e){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){if(!c.NativeListBox){Event.add(n.id+'_text','focus',t._importClasses,t);Event.add(n.id+'_text','mousedown',t._importClasses,t);Event.add(n.id+'_open','focus',t._importClasses,t);Event.add(n.id+'_open','mousedown',t._importClasses,t);}else Event.add(n.id,'focus',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 t=this,ed=t.editor,c,i=0,cl=[];c=ed.controlManager.createListBox('fontsizeselect',{title:'advanced.font_size',onselect:function(v){if(v.fontSize)ed.execCommand('FontSize',false,v.fontSize);else{each(t.settings.theme_advanced_font_sizes,function(v,k){if(v['class'])cl.push(v['class']);});ed.editorCommands._applyInlineStyle('span',{'class':v['class']},{check_classes:cl});}}});if(c){each(t.settings.theme_advanced_font_sizes,function(v,k){var fz=v.fontSize;if(fz>=1&&fz<=7)fz=t.sizes[parseInt(fz)-1]+'pt';c.add(k,v,{'style':'font-size:'+fz,'class':'mceFontSize'+(i++)+(' '+(v['class']||''))});});}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;if(s.theme_advanced_default_foreground_color)o.default_color=s.theme_advanced_default_foreground_color;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;if(s.theme_advanced_default_background_color)o.default_color=s.theme_advanced_default_background_color;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(s.readonly){n=DOM.add(tb,'tr');n=ic=DOM.add(n,'td',{'class':'mceIframeContainer'});return ic;}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(v.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']||da).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,cl,fz,fn;if(s.readonly)return;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(ed.settings.convert_fonts_to_spans){ed.dom.getParent(n,function(n){if(n.nodeName==='SPAN'){if(!cl&&n.className)cl=n.className;if(!fz&&n.style.fontSize)fz=n.style.fontSize;if(!fn&&n.style.fontFamily)fn=n.style.fontFamily.replace(/[\"\']+/g,'').replace(/^([^,]+).*/,'$1').toLowerCase();}return false;});if(c=cm.get('fontselect')){c.select(function(v){return v.replace(/^([^,]+).*/,'$1').toLowerCase()==fn;});}if(c=cm.get('fontsizeselect')){c.select(function(v){if(v.fontSize&&v.fontSize===fz)return true;if(v['class']&&v['class']===cl)return true;});}}else{if(c=cm.get('fontselect'))c.select(ed.queryCommandValue('FontName'));if(c=cm.get('fontsizeselect')){v=ed.queryCommandValue('FontSize');c.select(function(iv){return iv.fontSize==v;});}}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||n.nodeName==='BR'||(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,{color:t.fgColor,func:function(co){t.fgColor=co;t.editor.execCommand('ForeColor',false,co);}});},_mceBackColor:function(){var t=this;this._mceColorPicker(0,{color:t.bgColor,func:function(co){t.bgColor=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);}()); \ No newline at end of file (function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],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(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({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_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";if(j.settings.convert_fonts_to_spans){o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){j.onNodeChange.add(l._nodeChanged,l);if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){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((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(j){var i=this.editor,k=i.controlManager.get("styleselect");if(k.getLength()==0){f(i.dom.getClasses(),function(l){k.add(l["class"],l["class"])})}},_createStyleSelect:function(m){var j=this,i=j.editor,k=i.controlManager,l=k.createListBox("styleselect",{title:"advanced.style_select",onselect:function(n){if(l.selectedValue===n){i.execCommand("mceSetStyleInfo",0,{command:"removeformat"});l.select();return false}else{i.execCommand("mceSetCSSClass",0,n)}}});if(l){f(i.getParam("theme_advanced_styles","","hash"),function(o,n){if(o){l.add(j.editor.translate(n),o)}});l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",j._importClasses,j);b.add(p.id+"_text","mousedown",j._importClasses,j);b.add(p.id+"_open","focus",j._importClasses,j);b.add(p.id+"_open","mousedown",j._importClasses,j)}else{b.add(p.id,"focus",j._importClasses,j)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",cmd:"FontName"});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){if(i.fontSize){k.execCommand("FontSize",false,i.fontSize)}else{f(m.settings.theme_advanced_font_sizes,function(p,o){if(p["class"]){j.push(p["class"])}});k.editorCommands._applyInlineStyle("span",{"class":i["class"]},{check_classes:j})}}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={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"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=j.settings,n=d.get(j.id+"_tbl"),o=d.get(j.id+"_ifr"),m;i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);m=n.clientHeight-o.clientHeight;d.setStyle(o,"height",l-m);d.setStyles(n,{width:i,height:l})},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(n.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(w,k){var z=this,p,m,r=z.editor,A=z.settings,y,j=r.controlManager,u,l,q=[],x;x=A.theme_advanced_toolbar_align.toLowerCase();x="mce"+z._ufirst(x);l=d.add(d.add(w,"tr"),"td",{"class":"mceToolbar "+x});if(!r.getParam("accessibility_focus")){q.push(d.createHTML("a",{href:"#",onfocus:"tinyMCE.get('"+r.id+"').focus();"},"<!-- IE -->"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},"<!-- IE -->"));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":"&#160;");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}if(w.theme_advanced_resize_horizontal){r.style.width=Math.max(10,n.cw)+"px"}r.style.height=Math.max(10,n.ch)+"px";d.get(p.id+"_ifr").style.height=Math.max(10,parseInt(n.ch)+v.deltaHeight)+"px"})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(x){var z,t,o,s,y,r;z=d.get(p.id+"_tbl");o=z.clientWidth;s=z.clientHeight;miw=w.theme_advanced_resizing_min_width||100;mih=w.theme_advanced_resizing_min_height||100;maw=w.theme_advanced_resizing_max_width||65535;mah=w.theme_advanced_resizing_max_height||65535;t=d.add(d.get(p.id+"_parent"),"div",{"class":"mcePlaceHolder"});d.setStyles(t,{width:o,height:s});d.hide(z);d.show(t);i={x:x.screenX,y:x.screenY,w:o,h:s,dx:null,dy:null};q=b.add(d.doc,"mousemove",function(B){var n,A;i.dx=B.screenX-i.x;i.dy=B.screenY-i.y;n=Math.max(miw,i.w+i.dx);A=Math.max(mih,i.h+i.dy);n=Math.min(maw,n);A=Math.min(mah,A);if(w.theme_advanced_resize_horizontal){t.style.width=n+"px"}t.style.height=A+"px";return b.cancel(B)});u=b.add(d.doc,"mouseup",function(n){var A;b.remove(d.doc,"mousemove",q);b.remove(d.doc,"mouseup",u);z.style.display="";d.remove(t);if(i.dx===null){return}A=d.get(p.id+"_ifr");if(w.theme_advanced_resize_horizontal){z.style.width=Math.max(10,i.w+i.dx)+"px"}z.style.height=Math.max(10,i.h+i.dy)+"px";A.style.height=Math.max(10,A.clientHeight+i.dy)+"px";if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:i.w+i.dx,ch:i.h+i.dy})}});return b.cancel(x)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(l,u,k,q){var y=this,i,r=0,x,m,z=y.settings,w,j,o;if(z.readonly){return}e.each(y.stateControls,function(n){u.setActive(n,l.queryCommandState(y.controls[n][1]))});u.setActive("visualaid",l.hasVisual);u.setDisabled("undo",!l.undoManager.hasUndo()&&!l.typing);u.setDisabled("redo",!l.undoManager.hasRedo());u.setDisabled("outdent",!l.queryCommandState("Outdent"));i=d.getParent(k,"A");if(m=u.get("link")){if(!i||!i.name){m.setDisabled(!i&&q);m.setActive(!!i)}}if(m=u.get("unlink")){m.setDisabled(!i&&q);m.setActive(!!i&&!i.name)}if(m=u.get("anchor")){m.setActive(!!i&&i.name);if(e.isWebKit){i=d.getParent(k,"IMG");m.setActive(!!i&&d.getAttrib(i,"mce_name")=="a")}}i=d.getParent(k,"IMG");if(m=u.get("image")){m.setActive(!!i&&k.className.indexOf("mceItem")==-1)}if(m=u.get("styleselect")){if(k.className){y._importClasses();m.select(k.className)}else{m.select()}}if(m=u.get("formatselect")){i=d.getParent(k,d.isBlock);if(i){m.select(i.nodeName.toLowerCase())}}if(l.settings.convert_fonts_to_spans){l.dom.getParent(k,function(p){if(p.nodeName==="SPAN"){if(!w&&p.className){w=p.className}if(!j&&p.style.fontSize){j=p.style.fontSize}if(!o&&p.style.fontFamily){o=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}}return false});if(m=u.get("fontselect")){m.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==o})}if(m=u.get("fontsizeselect")){m.select(function(n){if(n.fontSize&&n.fontSize===j){return true}if(n["class"]&&n["class"]===w){return true}})}}else{if(m=u.get("fontselect")){m.select(l.queryCommandValue("FontName"))}if(m=u.get("fontsizeselect")){x=l.queryCommandValue("FontSize");m.select(function(n){return n.fontSize==x})}}if(z.theme_advanced_path&&z.theme_advanced_statusbar_location){i=d.get(l.id+"_path")||d.add(l.id+"_path_row","span",{id:l.id+"_path"});d.setHTML(i,"");l.dom.getParent(k,function(A){var p=A.nodeName.toLowerCase(),s,v,t="";if(A.nodeType!=1||A.nodeName==="BR"||(d.hasClass(A,"mceItemHidden")||d.hasClass(A,"mceItemRemoved"))){return}if(x=d.getAttrib(A,"mce_name")){p=x}if(e.isIE&&A.scopeName!=="HTML"){p=A.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(x=d.getAttrib(A,"src")){t+="src: "+x+" "}break;case"a":if(x=d.getAttrib(A,"name")){t+="name: "+x+" ";p+="#"+x}if(x=d.getAttrib(A,"href")){t+="href: "+x+" "}break;case"font":if(z.convert_fonts_to_spans){p="span"}if(x=d.getAttrib(A,"face")){t+="font: "+x+" "}if(x=d.getAttrib(A,"size")){t+="size: "+x+" "}if(x=d.getAttrib(A,"color")){t+="color: "+x+" "}break;case"span":if(x=d.getAttrib(A,"style")){t+="style: "+x+" "}break}if(x=d.getAttrib(A,"id")){t+="id: "+x+" "}if(x=A.className){x=x.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g,"");if(x&&x.indexOf("mceItem")==-1){t+="class: "+x+" ";if(d.isBlock(A)||p=="img"||p=="span"){p+="."+x}}}p=p.replace(/(html:)/g,"");p={name:p,node:A,title:t};y.onResolveName.dispatch(y,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",onmousedown:"return false;",title:t,"class":"mcePath_"+(r++)},p);if(i.hasChildNodes()){i.insertBefore(d.doc.createTextNode(" \u00bb "),i.firstChild);i.insertBefore(v,i.firstChild)}else{i.appendChild(v)}},l.getBody())}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:e.baseURL+"/themes/advanced/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:e.baseURL+"/themes/advanced/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce)); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js b/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js
index b3cef01..21eb259 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js
+++ b/public/javascripts/tiny_mce/themes/advanced/editor_template_src.js
@@ -1,11 +1,11 @@
1/** 1/**
2 * $Id: editor_template_src.js 960 2008-11-12 18:30:32Z spocke $ 2 * $Id: editor_template_src.js 1045 2009-03-04 20:03:18Z spocke $
3 * 3 *
4 * @author Moxiecode 4 * @author Moxiecode
5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved.
6 */ 6 */
7 7
8(function() { 8(function(tinymce) {
9 var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; 9 var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;
10 10
11 // Tell it to load theme specific language pack(s) 11 // Tell it to load theme specific language pack(s)
@@ -104,7 +104,7 @@
104 } 104 }
105 } 105 }
106 106
107 if (/\s*\./.test(v)) 107 if (/^\s*\./.test(v))
108 cl = v.replace(/\./g, ''); 108 cl = v.replace(/\./g, '');
109 109
110 o[k] = cl ? {'class' : cl} : {fontSize : v}; 110 o[k] = cl ? {'class' : cl} : {fontSize : v};
@@ -440,7 +440,7 @@
440 } 440 }
441*/ 441*/
442 442
443 if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus')) 443 if (!ed.getParam('accessibility_focus'))
444 Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();}); 444 Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});
445 445
446 if (s.theme_advanced_toolbar_location == 'external') 446 if (s.theme_advanced_toolbar_location == 'external')
@@ -655,7 +655,7 @@
655 655
656 n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a}); 656 n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a});
657 657
658 if (!ed.getParam('accessibility_focus') || ed.getParam('tab_focus')) 658 if (!ed.getParam('accessibility_focus'))
659 h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->')); 659 h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));
660 660
661 h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->')); 661 h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->'));
@@ -687,10 +687,10 @@
687 687
688 n = DOM.add(tb, 'tr'); 688 n = DOM.add(tb, 'tr');
689 n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); 689 n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});
690 n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : '&nbsp;'); 690 n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : '&#160;');
691 DOM.add(n, 'a', {href : '#', accesskey : 'x'}); 691 DOM.add(n, 'a', {href : '#', accesskey : 'x'});
692 692
693 if (s.theme_advanced_resizing && !tinymce.isOldWebKit) { 693 if (s.theme_advanced_resizing) {
694 DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'}); 694 DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});
695 695
696 if (s.theme_advanced_resizing_use_cookie) { 696 if (s.theme_advanced_resizing_use_cookie) {
@@ -1150,4 +1150,4 @@
1150 }); 1150 });
1151 1151
1152 tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); 1152 tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);
1153}()); \ No newline at end of file 1153}(tinymce)); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/themes/advanced/image.htm b/public/javascripts/tiny_mce/themes/advanced/image.htm
index 6c36646..7ec1052 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/image.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/image.htm
@@ -6,7 +6,6 @@
6 <script type="text/javascript" src="../../utils/mctabs.js"></script> 6 <script type="text/javascript" src="../../utils/mctabs.js"></script>
7 <script type="text/javascript" src="../../utils/form_utils.js"></script> 7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="js/image.js"></script> 8 <script type="text/javascript" src="js/image.js"></script>
9 <base target="_self" />
10</head> 9</head>
11<body id="image" style="display: none"> 10<body id="image" style="display: none">
12<form onsubmit="ImageDialog.update();return false;" action="#"> 11<form onsubmit="ImageDialog.update();return false;" action="#">
@@ -20,7 +19,7 @@
20 <div id="general_panel" class="panel current"> 19 <div id="general_panel" class="panel current">
21 <table border="0" cellpadding="4" cellspacing="0"> 20 <table border="0" cellpadding="4" cellspacing="0">
22 <tr> 21 <tr>
23 <td nowrap="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td> 22 <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>
24 <td><table border="0" cellspacing="0" cellpadding="0"> 23 <td><table border="0" cellspacing="0" cellpadding="0">
25 <tr> 24 <tr>
26 <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td> 25 <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>
@@ -33,11 +32,11 @@
33 <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> 32 <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>
34 </tr> 33 </tr>
35 <tr> 34 <tr>
36 <td nowrap="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td> 35 <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>
37 <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td> 36 <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>
38 </tr> 37 </tr>
39 <tr> 38 <tr>
40 <td nowrap="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td> 39 <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>
41 <td><select id="align" name="align" onchange="ImageDialog.updateStyle();"> 40 <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">
42 <option value="">{#not_set}</option> 41 <option value="">{#not_set}</option>
43 <option value="baseline">{#advanced_dlg.image_align_baseline}</option> 42 <option value="baseline">{#advanced_dlg.image_align_baseline}</option>
@@ -51,21 +50,21 @@
51 </select></td> 50 </select></td>
52 </tr> 51 </tr>
53 <tr> 52 <tr>
54 <td nowrap="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td> 53 <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>
55 <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" /> 54 <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />
56 x 55 x
57 <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td> 56 <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>
58 </tr> 57 </tr>
59 <tr> 58 <tr>
60 <td nowrap="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td> 59 <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>
61 <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td> 60 <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
62 </tr> 61 </tr>
63 <tr> 62 <tr>
64 <td nowrap="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td> 63 <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>
65 <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td> 64 <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
66 </tr> 65 </tr>
67 <tr> 66 <tr>
68 <td nowrap="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td> 67 <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>
69 <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td> 68 <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>
70 </tr> 69 </tr>
71 </table> 70 </table>
diff --git a/public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg b/public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg
index b4c542d..b4c542d 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg
+++ b/public/javascripts/tiny_mce/themes/advanced/img/colorpicker.jpg
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/img/icons.gif b/public/javascripts/tiny_mce/themes/advanced/img/icons.gif
index ccac36f..ccac36f 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/img/icons.gif
+++ b/public/javascripts/tiny_mce/themes/advanced/img/icons.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/about.js b/public/javascripts/tiny_mce/themes/advanced/js/about.js
index 5cee9ed..5cee9ed 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/about.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/about.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/anchor.js b/public/javascripts/tiny_mce/themes/advanced/js/anchor.js
index b5efd1e..b5efd1e 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/anchor.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/anchor.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/charmap.js b/public/javascripts/tiny_mce/themes/advanced/js/charmap.js
index 8467ef6..8467ef6 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/charmap.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/charmap.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/color_picker.js b/public/javascripts/tiny_mce/themes/advanced/js/color_picker.js
index fd9700f..fd9700f 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/color_picker.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/color_picker.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/image.js b/public/javascripts/tiny_mce/themes/advanced/js/image.js
index 4982ce0..4982ce0 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/image.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/image.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/link.js b/public/javascripts/tiny_mce/themes/advanced/js/link.js
index 2974878..f67a5bc 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/link.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/link.js
@@ -53,6 +53,7 @@ var LinkDialog = {
53 53
54 // Create new anchor elements 54 // Create new anchor elements
55 if (e == null) { 55 if (e == null) {
56 ed.getDoc().execCommand("unlink", false, null);
56 tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1}); 57 tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
57 58
58 tinymce.each(ed.dom.select("a"), function(n) { 59 tinymce.each(ed.dom.select("a"), function(n) {
@@ -62,8 +63,8 @@ var LinkDialog = {
62 ed.dom.setAttribs(e, { 63 ed.dom.setAttribs(e, {
63 href : f.href.value, 64 href : f.href.value,
64 title : f.linktitle.value, 65 title : f.linktitle.value,
65 target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null, 66 target : f.target_list ? getSelectValue(f, "target_list") : null,
66 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null 67 'class' : f.class_list ? getSelectValue(f, "class_list") : null
67 }); 68 });
68 } 69 }
69 }); 70 });
@@ -71,8 +72,8 @@ var LinkDialog = {
71 ed.dom.setAttribs(e, { 72 ed.dom.setAttribs(e, {
72 href : f.href.value, 73 href : f.href.value,
73 title : f.linktitle.value, 74 title : f.linktitle.value,
74 target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null, 75 target : f.target_list ? getSelectValue(f, "target_list") : null,
75 'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null 76 'class' : f.class_list ? getSelectValue(f, "class_list") : null
76 }); 77 });
77 } 78 }
78 79
@@ -92,7 +93,7 @@ var LinkDialog = {
92 if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email'))) 93 if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))
93 n.value = 'mailto:' + n.value; 94 n.value = 'mailto:' + n.value;
94 95
95 if (/^\s*www./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external'))) 96 if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))
96 n.value = 'http://' + n.value; 97 n.value = 'http://' + n.value;
97 }, 98 },
98 99
diff --git a/public/javascripts/tiny_mce/themes/advanced/js/source_editor.js b/public/javascripts/tiny_mce/themes/advanced/js/source_editor.js
index af2231c..2793286 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/js/source_editor.js
+++ b/public/javascripts/tiny_mce/themes/advanced/js/source_editor.js
@@ -2,7 +2,7 @@ tinyMCEPopup.requireLangPack();
2tinyMCEPopup.onInit.add(onLoadInit); 2tinyMCEPopup.onInit.add(onLoadInit);
3 3
4function saveContent() { 4function saveContent() {
5 tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value); 5 tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});
6 tinyMCEPopup.close(); 6 tinyMCEPopup.close();
7} 7}
8 8
@@ -13,7 +13,7 @@ function onLoadInit() {
13 if (tinymce.isGecko) 13 if (tinymce.isGecko)
14 document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck"); 14 document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");
15 15
16 document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent(); 16 document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});
17 17
18 if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) { 18 if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {
19 setWrap('soft'); 19 setWrap('soft');
diff --git a/public/javascripts/tiny_mce/themes/advanced/langs/en.js b/public/javascripts/tiny_mce/themes/advanced/langs/en.js
index 69694b1..69694b1 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/langs/en.js
+++ b/public/javascripts/tiny_mce/themes/advanced/langs/en.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js b/public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js
index 9d124d7..9d124d7 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js
+++ b/public/javascripts/tiny_mce/themes/advanced/langs/en_dlg.js
diff --git a/public/javascripts/tiny_mce/themes/advanced/link.htm b/public/javascripts/tiny_mce/themes/advanced/link.htm
index 286cc92..a78bd33 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/link.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/link.htm
@@ -7,7 +7,6 @@
7 <script type="text/javascript" src="../../utils/form_utils.js"></script> 7 <script type="text/javascript" src="../../utils/form_utils.js"></script>
8 <script type="text/javascript" src="../../utils/validate.js"></script> 8 <script type="text/javascript" src="../../utils/validate.js"></script>
9 <script type="text/javascript" src="js/link.js"></script> 9 <script type="text/javascript" src="js/link.js"></script>
10 <base target="_self" />
11</head> 10</head>
12<body id="link" style="display: none"> 11<body id="link" style="display: none">
13<form onsubmit="LinkDialog.update();return false;" action="#"> 12<form onsubmit="LinkDialog.update();return false;" action="#">
@@ -22,7 +21,7 @@
22 21
23 <table border="0" cellpadding="4" cellspacing="0"> 22 <table border="0" cellpadding="4" cellspacing="0">
24 <tr> 23 <tr>
25 <td nowrap="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td> 24 <td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>
26 <td><table border="0" cellspacing="0" cellpadding="0"> 25 <td><table border="0" cellspacing="0" cellpadding="0">
27 <tr> 26 <tr>
28 <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> 27 <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td>
@@ -39,7 +38,7 @@
39 <td><select id="target_list" name="target_list"></select></td> 38 <td><select id="target_list" name="target_list"></select></td>
40 </tr> 39 </tr>
41 <tr> 40 <tr>
42 <td nowrap="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td> 41 <td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>
43 <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td> 42 <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>
44 </tr> 43 </tr>
45 <tr> 44 <tr>
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/content.css b/public/javascripts/tiny_mce/themes/advanced/skins/default/content.css
index 19da194..19da194 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/content.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/content.css
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css b/public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css
index 2c341aa..873c67e 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/dialog.css
@@ -19,6 +19,7 @@ td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
19textarea {resize:none;outline:none;} 19textarea {resize:none;outline:none;}
20a:link, a:visited {color:black;} 20a:link, a:visited {color:black;}
21a:hover {color:#2B6FB6;} 21a:hover {color:#2B6FB6;}
22.nowrap {white-space: nowrap}
22 23
23/* Forms */ 24/* Forms */
24fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} 25fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
@@ -47,6 +48,7 @@ padding-bottom:2px;
47#cancel {background:url(img/buttons.png) 0 0;} 48#cancel {background:url(img/buttons.png) 0 0;}
48 49
49/* Browse */ 50/* Browse */
51a.pickcolor, a.browse {text-decoration:none}
50a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} 52a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
51.mceOldBoxModel a.browse span {width:22px; height:20px;} 53.mceOldBoxModel a.browse span {width:22px; height:20px;}
52a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} 54a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png
index 7dd5841..7dd5841 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/buttons.png
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif
index 2eafd79..2eafd79 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/items.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
index 85e31df..85e31df 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_arrow.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
index adfdddc..adfdddc 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/menu_check.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif
index 5bb90fd..5bb90fd 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/progress.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif
index ce4be63..ce4be63 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/img/tabs.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css b/public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css
index 230a2ee..230a2ee 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/default/ui.css
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css
index b8431d1..b8431d1 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/content.css
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
index 8d288e3..6c37d6f 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/dialog.css
@@ -19,6 +19,7 @@ td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}
19textarea {resize:none;outline:none;} 19textarea {resize:none;outline:none;}
20a:link, a:visited {color:black;} 20a:link, a:visited {color:black;}
21a:hover {color:#2B6FB6;} 21a:hover {color:#2B6FB6;}
22.nowrap {white-space: nowrap}
22 23
23/* Forms */ 24/* Forms */
24fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;} 25fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}
@@ -47,6 +48,7 @@ padding-bottom:2px;
47#cancel {background:url(../default/img/buttons.png) 0 0;} 48#cancel {background:url(../default/img/buttons.png) 0 0;}
48 49
49/* Browse */ 50/* Browse */
51a.pickcolor, a.browse {text-decoration:none}
50a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;} 52a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}
51.mceOldBoxModel a.browse span {width:22px; height:20px;} 53.mceOldBoxModel a.browse span {width:22px; height:20px;}
52a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;} 54a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
index 12cfb41..12cfb41 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg.png
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
index 8996c74..8996c74 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_black.png
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
index bd5d255..bd5d255 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/img/button_bg_silver.png
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
index c10a3f0..c10a3f0 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui.css
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
index 153f0c3..153f0c3 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_black.css
diff --git a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
index 7fe3b45..7fe3b45 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
+++ b/public/javascripts/tiny_mce/themes/advanced/skins/o2k7/ui_silver.css
diff --git a/public/javascripts/tiny_mce/themes/advanced/source_editor.htm b/public/javascripts/tiny_mce/themes/advanced/source_editor.htm
index 119a913..553e7bb 100755..100644
--- a/public/javascripts/tiny_mce/themes/advanced/source_editor.htm
+++ b/public/javascripts/tiny_mce/themes/advanced/source_editor.htm
@@ -4,7 +4,6 @@
4 <title>{#advanced_dlg.code_title}</title> 4 <title>{#advanced_dlg.code_title}</title>
5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script> 5 <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
6 <script type="text/javascript" src="js/source_editor.js"></script> 6 <script type="text/javascript" src="js/source_editor.js"></script>
7 <base target="_self" />
8</head> 7</head>
9<body onresize="resizeInputs();" style="display:none; overflow:hidden;"> 8<body onresize="resizeInputs();" style="display:none; overflow:hidden;">
10 <form name="source" onsubmit="saveContent();return false;" action="#"> 9 <form name="source" onsubmit="saveContent();return false;" action="#">
diff --git a/public/javascripts/tiny_mce/themes/simple/editor_template.js b/public/javascripts/tiny_mce/themes/simple/editor_template.js
index d19fb53..ed89abc 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/editor_template.js
+++ b/public/javascripts/tiny_mce/themes/simple/editor_template.js
@@ -1 +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.documentBaseURI.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);})(); \ No newline at end of file (function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,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)})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/themes/simple/editor_template_src.js b/public/javascripts/tiny_mce/themes/simple/editor_template_src.js
index fb0bd78..fb0bd78 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/editor_template_src.js
+++ b/public/javascripts/tiny_mce/themes/simple/editor_template_src.js
diff --git a/public/javascripts/tiny_mce/themes/simple/img/icons.gif b/public/javascripts/tiny_mce/themes/simple/img/icons.gif
index 16af141..16af141 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/img/icons.gif
+++ b/public/javascripts/tiny_mce/themes/simple/img/icons.gif
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/simple/langs/en.js b/public/javascripts/tiny_mce/themes/simple/langs/en.js
index 9f08f10..9f08f10 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/langs/en.js
+++ b/public/javascripts/tiny_mce/themes/simple/langs/en.js
diff --git a/public/javascripts/tiny_mce/themes/simple/skins/default/content.css b/public/javascripts/tiny_mce/themes/simple/skins/default/content.css
index 2506c80..2506c80 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/skins/default/content.css
+++ b/public/javascripts/tiny_mce/themes/simple/skins/default/content.css
diff --git a/public/javascripts/tiny_mce/themes/simple/skins/default/ui.css b/public/javascripts/tiny_mce/themes/simple/skins/default/ui.css
index 076fe84..076fe84 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/skins/default/ui.css
+++ b/public/javascripts/tiny_mce/themes/simple/skins/default/ui.css
diff --git a/public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css b/public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css
index 595809f..595809f 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css
+++ b/public/javascripts/tiny_mce/themes/simple/skins/o2k7/content.css
diff --git a/public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png b/public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
index 527e349..527e349 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
+++ b/public/javascripts/tiny_mce/themes/simple/skins/o2k7/img/button_bg.png
Binary files differ
diff --git a/public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css b/public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css
index cf6c35d..cf6c35d 100755..100644
--- a/public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css
+++ b/public/javascripts/tiny_mce/themes/simple/skins/o2k7/ui.css
diff --git a/public/javascripts/tiny_mce/tiny_mce.js b/public/javascripts/tiny_mce/tiny_mce.js
index 99dbcd1..fe487e0 100755..100644
--- a/public/javascripts/tiny_mce/tiny_mce.js
+++ b/public/javascripts/tiny_mce/tiny_mce.js
@@ -1 +1 @@
var tinymce={majorVersion:'3',minorVersion:'2.1.1',releaseDate:'2008-11-27',_init:function(){var t=this,d=document,w=window,na=navigator,ua=na.userAgent,i,nl,n,base,p,v;t.isOpera=w.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!w.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(na.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;t.isAir=/adobeair/i.test(ua);if(w.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;t.query=tinyMCEPreInit.query;return;}t.suffix='';nl=d.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(v=nl[i].href){if(/^https?:\/\/[^\/]+$/.test(v))v+='/';base=v?v.match(/.*\//)[0]:'';}}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';if((p=n.src.indexOf('?'))!=-1)t.query=n.src.substring(p+1);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=d.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}n=d.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;f={func:f,scope:s||this};if(!t.unloads){function unload(){var li=t.unloads,o,n;if(li){for(n in li){o=li[n];if(o&&o.func)o.func.call(o.scope,1);}if(w.detachEvent){w.detachEvent('onbeforeunload',fakeUnload);w.detachEvent('onunload',unload);}else if(w.removeEventListener)w.removeEventListener('unload',unload,false);t.unloads=o=li=w=unload=null;if(window.CollectGarbage)window.CollectGarbage();}};function fakeUnload(){var d=document;if(d.readyState=='interactive'){function stop(){d.detachEvent('onstop',stop);unload();d=null;};d.attachEvent('onstop',stop);window.setTimeout(function(){d.detachEvent('onstop',stop);},0);}};if(w.attachEvent){w.attachEvent('onunload',unload);w.attachEvent('onbeforeunload',fakeUnload);}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 s?tinymce.map(s.split(d||','),tinymce.trim):s;},_addVer:function(u){var v;if(!this.query)return u;v=(u.indexOf('?')==-1?'?':'&')+this.query;if(u.indexOf('#')==-1)return u+v;return u.replace('#',v+'#');}};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;if(u==="./")return u;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,l;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0,l=base.length;i<l;i++){if(i>=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length<items.length){for(i=0,l=items.length;i<l;i++){if(i>=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0,l=base.length-(bp-1);i<l;i++)out+="../";for(i=bp-1,l=items.length;i<l;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);function ready(){if(!o.async||x.readyState==4||c++>10000){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;}else w.setTimeout(ready,10);};if(!o.async)return ready();t=w.setTimeout(ready,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_]+)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},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,sr;e=t.get(e);p=t.getPos(e);sr=t.getSize(e);return{x:p.x,y:p.y,w:sr.w,h:sr.h};},getSize:function(e){var t=this,w,h;e=t.get(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{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.toUpperCase()==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(e&&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,xp;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.selectorRe)t.selectorRe=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i;;if(tinymce.isAir){each(tinymce.explode(pa),function(v){if(!(xp=t.cache[v])){xp='';each(v.split(' '),function(v){v=t.selectorRe.exec(v);xp+=v[1]?'//'+v[1]:'//*';if(v[2])xp+="[@id='"+v[2]+"']";if(v[3]){each(v[3].split('.'),function(n){xp+="[@class = '"+n+"' or contains(concat(' ', @class, ' '), ' "+n+" ')]";});}});t.cache[v]=xp;}xp=t.doc.evaluate(xp,s,null,4,null);while(n=xp.iterateNext())o.push(n);});return o;}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=t.selectorRe.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;t.setAttribs(e,a);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(!e||!n)return;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(!is(v,'string')){each(v,function(v,n){t.setStyle(e,n,v);});return;}if(s.keep_values){if(v&&!t._isRes(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;case"shape":e.setAttribute('mce_style',v);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||e.nodeType!==1)return false;if(!is(dv))dv='';if(/^(src|href|style|coords|shape)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}if(isIE&&t.props[n]){v=e[t.props[n]];v=v&&v.nodeValue?v.nodeValue:v;}if(!v)v=e.getAttribute(n,2);if(n==='style'){v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values&&!t._isRes(v))e.setAttribute('mce_style',v);}}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===20)v='';break;case'width':case'height':case'vspace':case'checked':case'disabled':case'readonly':if(v===0)v='';break;case'hspace':if(v===-1)v='';break;case'maxlength':case'tabindex':if(v===32768||v===2147483647||v==='32768')v='';break;case'compact':case'noshade':case'nowrap':if(v===65535)return n;return dv;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!==undefined&&v!==null&&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];};st=st.replace(/&(#?[a-z0-9]+);/g,'&$1_MCE_SEMI_');each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/_MCE_SEMI_/g,';');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('+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){if(tinymce.isGecko&&k.indexOf('-moz-')===0)return;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:tinymce._addVer(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||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>');}else if(isIE){h=h.replace(/&apos;/g,'&#39;');h=h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,'');}h=h.replace(/<a( )([^>]+)\/>|<a\/>/gi,'<a$1$2></a>');if(s.keep_values){if(/<script|style/.test(h)){function trim(s){s=s.replace(/(<!--\[CDATA\[|\]\]-->)/g,'\n');s=s.replace(/^[\r\n]*|[\r\n]*$/g,'');s=s.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,'');s=s.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,'');return s;};h=h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/g,function(v,a,b){b=trim(b);if(!a)a=' type="text/javascript"';if(b)b='<!--\n'+b+'\n// -->';return'<mce:script'+a+'>'+b+'</mce:script>';});h=h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/g,function(v,a,b){b=trim(b);return'<mce:style'+a+'><!--\n'+b+'\n--></mce:style><style'+a+' mce_bogus="1">'+b+'</style>';});}h=h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,'<!--[CDATA[$1]]-->');h=h.replace(/<([\w:]+) [^>]*(src|href|style|shape|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(t._isRes(c))return m;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'&&b!='shape'){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|shape)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords|shape)=([^\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,n,v;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;n=e.firstChild;v='';if(n){do{v+=n.nodeValue;}while(n.nextSibling);}return v||s;}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|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));});}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.get(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);},_isRes:function(c){return/^(top|left|bottom|right|width|height)/i.test(c)||/;\s*(top|left|bottom|right|width|height)/i.test(c);}});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;if(e.domLoaded)return;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){Event.domLoaded=1;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(){function trimNl(s){return s.replace(/[\n\r]+/g,'');};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;each(['onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent'],function(e){t[e]=new tinymce.util.Dispatcher(t);});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';t.onBeforeGetContent.dispatch(t,s);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;s.content=t.isCollapsed()?'':wb+t.serializer.serialize(e,s)+wa;t.onGetContent.dispatch(t,s);return s.content;},setContent:function(h,s){var t=this,r=t.getRng(),c,d=t.win.document;s=s||{format:'html'};s.set=true;h=s.content=t.dom.processHTML(h);t.onBeforeSetContent.dispatch(t,s);h=s.content;if(r.insertNode){h+='<span id="__caret">_</span>';r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h));c=t.dom.get('__caret');r=d.createRange();r.setStartBefore(c);r.setEndAfter(c);t.setRng(r);d.execCommand('Delete',false,null);t.dom.remove('__caret');}else{if(r.item){d.execCommand('Delete',false,null);r=t.getRng();}r.pasteHTML(h);}t.onSetContent.dispatch(t,s);},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&&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&&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+=trimNl(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};trimNl(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);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||'';nvl=trimNl(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||r.collapsed;},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(tinymce.isWebKit&&s.anchorNode&&s.anchorNode.nodeType==1)return s.anchorNode.childNodes[s.anchorOffset];if(r.startContainer==r.endContainer){if(r.startOffset-r.endOffset<2){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){if(tinymce.isIE)v=v.replace(/^\-|\-$/g,' ');this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g,' ')));},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|aggregate)/,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',bool_attrs:/(checked|disabled|readonly|selected|nowrap)/,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,remove_redundant_brs:1,element_format:'xhtml'},s);t.dom=s.dom;if(s.remove_redundant_brs){t.onPostProcess.add(function(se,o){o.content=o.content.replace(/<br \/>(\s*<\/li>)/g,'$1');});}if(s.element_format=='html'){t.onPostProcess.add(function(se,o){o.content=o.content.replace(/<([^>]+) \/>/g,'<$1>');});}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;if(o.format=='html'){p=t._protect({content:h,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});h=p.content;if(s.entity_encoding!=='raw')h=t._encode(h);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);h=h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,'<![CDATA[$1]]>');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(ru.padd){if(hc&&(cn=n.firstChild)&&cn.nodeType===1&&n.childNodes.length===1){if(cn.hasAttribute?cn.hasAttribute('mce_bogus'):cn.getAttribute('mce_bogus'))w.writeText('\u00a0');}else if(!hc)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){var t=this;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.pattern,function(x,a,b,c){b=dec(b);if(p.encode)b=t._encode(b);o.items.push(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;},_encode:function(h){var t=this,s=t.settings,l;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)+';';});}}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(/,/g,'|').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);if(this.settings.bool_attrs.test(na)&&v){v=(''+v).toLowerCase();if(v==='false'||v==='0')return null;v=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,Event=tinymce.dom.Event;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(Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:tinymce._addVer(u),error:t.settings.error,async:false,success:function(co){t.eval(co);}});}else document.write('<script type="text/javascript" src="'+tinymce._addVer(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.dom.ScriptLoader.loadScript(o.url,function(){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(!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="'+tinymce._addVer(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);},loadScript:function(u,cb){var id=tinymce.DOM.uniqueId(),e;function done(){Event.clear(id);tinymce.DOM.remove(id);if(cb){cb.call(document,u);cb=0;}};if(tinymce.isIE){tinymce.util.XHR.send({url:tinymce._addVer(u),async:false,success:function(co){window.execScript(co);done();}});}else{e=tinymce.DOM.create('script',{id:id,type:'text/javascript',src:tinymce._addVer(u)});Event.add(e,'load',done);(document.getElementsByTagName('head')[0]||document.body).appendChild(e);}}}});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';},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,'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();t._focusIdx=0;}},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,'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){var t=this,kc=e.keyCode;function focus(d){var i=t._focusIdx+d,e=DOM.select('a','menu_'+t.id)[i];if(e){t._focusIdx=i;e.focus();}};switch(kc){case 38:focus(-1);return;case 40:focus(1);return;case 13:return;case 27:return this.hideMenu();}},_add:function(tb,o){var n,s=o.settings,a,ro,it,cp=this.classPrefix,ic;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']);ic=DOM.add(n,'span',{'class':'mceIcon'+(s.icon?' mce_'+s.icon:'')});if(s.icon_src)DOM.add(ic,'img',{src:s.icon_src});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,l;l=DOM.encode(s.label||'');h='<a id="'+this.id+'" href="javascript:;" class="'+cp+' '+cp+'Enabled '+s['class']+(l?' '+cp+'Labeled':'')+'" onmousedown="return false;" onclick="return false;" title="'+DOM.encode(s.title)+'">';if(s.image)h+='<img class="mceIcon" src="'+s.image+'" />'+l+'</a>';else h+='<span class="mceIcon '+s['class']+'"></span>'+(l?'<span class="'+cp+'Label">'+l+'</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(va){var t=this,fv,f;if(va==undefined)return t.selectByIndex(-1);if(va&&va.call)f=va;else{f=function(v){return v==va;};}if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv)t.selectByIndex(-1);}},selectByIndex:function(idx){var t=this,e,o;if(idx!=t.selectedIndex){e=DOM.get(t.id+'_text');o=t.items[idx];if(o){t.selectedValue=o.value;t.selectedIndex=idx;DOM.setHTML(e,DOM.encode(o.title));DOM.removeClass(e,'mceTitle');}else{DOM.setHTML(e,DOM.encode(t.settings.title));DOM.addClass(e,'mceTitle');t.selectedValue=t.selectedIndex=null;}e=0;}else t.selectedValue=t.selectedIndex=null;},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.menu&&t.menu.isMenuVisible)return t.hideMenu();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=!tinymce.isOpera;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&&e.type=="mousedown"&&(e.target.id==t.id+'_text'||e.target.id==t.id+'_open'))return;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',onclick:function(){if(t.settings.onselect('')!==false)t.select('');}});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(e){if(!t._focused){t.keyDownHandler=Event.add(t.id+'_text','keydown',function(e){var idx=-1,v,kc=e.keyCode;each(t.items,function(v,i){if(t.selectedValue==v.value)idx=i;});if(kc==38)v=t.items[idx-1];else if(kc==40)v=t.items[idx+1];else if(kc==13){v=t.selectedValue;t.selectedValue=null;t.settings.onselect(v);return Event.cancel(e);}if(v){t.hideMenu();t.select(v.value);}});}t._focused=1;});Event.add(t.id+'_text','blur',function(){Event.remove(t.id+'_text','keydown',t.keyDownHandler);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(va){var t=this,fv,f;if(va==undefined)return t.selectByIndex(-1);if(va&&va.call)f=va;else{f=function(v){return v==va;};}if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv)t.selectByIndex(-1);}},selectByIndex:function(idx){DOM.get(this.id).selectedIndex=idx+1;this.selectedValue=this.items[idx]?this.items[idx].value:null;},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=t.items[e.target.selectedIndex-1];if(v&&(v=v.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;}if(t.isMenuVisible)return t.hideMenu();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);t.isMenuVisible=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&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id||e.id===t.id+'_open';}))return;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();}t.isMenuVisible=0;},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.onShowMenu=new tinymce.util.Dispatcher(t);t.onHideMenu=new tinymce.util.Dispatcher(t);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;}if(t.isMenuVisible)return t.hideMenu();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();}t.onShowMenu.dispatch(t);t.isMenuVisible=1;},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id+'_open';}))return;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');}t.onHideMenu.dispatch(t);t.isMenuVisible=0;},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 Event.cancel(e);});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'});DOM.setStyle(t.id+'_preview','backgroundColor',t.value);},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=tinymce.EditorManager.settings;if(s&&s.language){u=this.urls[n]+'/langs/'+s.language+'.js';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(document.domain&&lo.hostname!=document.domain)tinymce.relaxedDomain=document.domain;if(!tinymce.relaxedDomain&&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,e,el=[],ed;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)){ed=new tinymce.Editor(v,s);el.push(ed);ed.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);ed=new tinymce.Editor(v,s);el.push(ed);ed.render(1);}});});}});}break;case"textareas":case"specific_textareas":function hasClass(n,c){return c.constructor===RegExp?c.test(n.className):DOM.hasClass(n,c);};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)){e=DOM.get(v.name);if(!v.id&&!e)v.id=v.name;if(!v.id||t.get(v.id))v.id=DOM.uniqueId();ed=new tinymce.Editor(v.id,s);el.push(ed);ed.render(1);}});break;}if(s.oninit){l=co=0;each(el,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":if(!t.get(v))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":if(ed)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[cite],-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],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|tabindex|accesskey],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',keep_styles:1},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.save)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&&!s.ask){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed&&!t.isHidden())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(){window.setTimeout(function(){Event.remove(t.id,'focus',ask);t.windowManager.confirm(t.getLang('edit_confirm'),function(s){if(s)t.init();});},0);};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!==false){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){if(!l.initial)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.offsetWidth;h=s.height||e.style.height||e.offsetHeight;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)+(typeof(h)=='number'?(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()+'" />';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||(tinymce.isOpera&&parseFloat(opera.version())>=9.5))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{if(!s.readonly)d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);if(!s.readonly)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,element_format:s.element_format,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;if(!s.readonly)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>[\r\n]*|<br \/>[\r\n]*)$/,'');});}if(isGecko&&!s.readonly){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,ce=t.settings.content_editable;if(!sf){if(!ce&&(!isIE||t.selection.getNode().ownerDocument!=t.getDoc()))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||'en',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||'en')+'.'+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,st;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]){st=o.func.call(o.scope,ui,val);if(st!==true){t.onExecCommand.dispatch(t,cmd,ui,val,a);return st;}}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,s;if(t._isHidden())return;if(o=t.queryStateCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}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,s;if(t._isHidden())return;if(o=t.queryValueCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}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;if(e){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(!e||!t.initialized)return;o=o||{};o.save=true;if(!o.no_events){t.undoManager.typing=0;t.undoManager.add();}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" />');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;if(!o.no_events)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();if(!t.settings.content_editable){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.getBody(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getBody(),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&&!s.readonly){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())try{d.execCommand("useCSS",0,true);}catch(ex){}}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){var c=e.keyCode;if((c>=33&&c<=36)||(c>=37&&c<=40)||c==13||c==45||c==46||c==8||(tinymce.isMac&&(c==91||c==93))||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(tinymce.isMac&&o.ctrl!=e.metaKey)return;else if(!tinymce.isMac&&o.ctrl!=e.ctrlKey)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;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':n.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(n,'mce_style','');dom.setAttrib(n,'mce_name','span');break;}});}else if(o.set){each(t.dom.select('table,span',o.node).reverse(),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.onSetContent.add(function(ed,o){if(o.initial)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 process(no){var n,sp,nl,x;if(!s.inline_styles)return;nl=t.dom.select('font',no);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);}};t.onPreProcess.add(function(ed,o){if(o.get)process(o.node);});t.onSetContent.add(function(ed,o){if(o.initial)process(o.node);});},_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|aggregate)$/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;function isBlock(n){return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n.nodeName);};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,s=ed.selection,e=ed.dom.getParent(s.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{if(ed.settings.convert_fonts_to_spans)t._applyInlineStyle('span',{style:{fontFamily:v}});else ed.getDoc().execCommand('FontName',false,v);}},FontSize:function(u,v){var ed=this.editor,s=ed.settings,fc,fs;if(s.convert_fonts_to_spans&&v>=1&&v<=7){fs=tinymce.explode(s.font_size_style_values);fc=tinymce.explode(s.font_size_classes);if(fc)v=fc[v-1]||v;else v=fs[v-1]||v;}if(v>=1&&v<=7)ed.getDoc().execCommand('FontSize',false,v);else this._applyInlineStyle('span',{style:{fontSize: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(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontSize;if(!v&&(isOpera||isWebKit)){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return v||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(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontFamily.replace(/, /g,',').replace(/[\'\"]/g,'').toLowerCase();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(bl||n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(bl&&/^(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(bl||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())&&!ed.settings.force_span_wrappers)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(ed.settings.force_span_wrappers&&p.nodeName!='SPAN')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);},ForeColor:function(ui,v){var ed=this.editor;if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{color:v}});return;}else ed.getDoc().execCommand('ForeColor',false,v);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{backgroundColor:val}});return;}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,s=ed.selection,dom=ed.dom,bl,nb,b;function isBlock(n){return/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName);};bl=dom.getParent(s.getNode(),function(n){return isBlock(n);});if(bl){if((isIE&&isBlock(bl.parentNode))||bl.nodeName=='DIV'){nb=ed.dom.create(val);each(dom.getAttribs(bl),function(v){dom.setAttrib(nb,v.nodeName,dom.getAttrib(bl,v.nodeName));});b=s.getBookmark();dom.replace(nb,bl,1);s.moveToBookmark(b);ed.nodeChanged();return;}}val=ed.settings.forced_root_block?(val||'<p>'):val;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=ed.selection.getNode();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;}return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList()||(!ed.settings.inline_styles&&!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE'));},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(),isBlock);eb=dom.getParent(s.getEnd(),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(),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);},_applyInlineStyle:function(na,at,op){var t=this,ed=t.editor,dom=ed.dom,bm,lo={},kh;na=na.toUpperCase();if(op&&op.check_classes&&at['class'])op.check_classes.push(at['class']);function replaceFonts(){var bm;each(dom.select(tinymce.isWebKit&&!tinymce.isAir?'span':'font'),function(n){if(n.style.fontFamily=='mceinline'||n.face=='mceinline'){if(!bm)bm=ed.selection.getBookmark();at._mce_new='1';dom.replace(dom.create(na,at),n,1);}});each(dom.select(na),function(n){if(n.getAttribute('_mce_new')){function removeStyle(n){if(n.nodeType==1){each(at.style,function(v,k){dom.setStyle(n,k,'');});if(at['class']&&n.className&&op){each(op.check_classes,function(c){if(dom.hasClass(n,c))dom.removeClass(n,c);});}}};each(dom.select(na,n),removeStyle);if(n.parentNode&&n.parentNode.nodeType==1&&n.parentNode.childNodes.length==1)removeStyle(n.parentNode);dom.getParent(n.parentNode,function(pn){if(pn.nodeType==1){if(at.style){each(at.style,function(v,k){var sv;if(!lo[k]&&(sv=dom.getStyle(pn,k))){if(sv===v)dom.setStyle(n,k,'');lo[k]=1;}});}if(at['class']&&pn.className&&op){each(op.check_classes,function(c){if(dom.hasClass(pn,c))dom.removeClass(n,c);});}}return false;});n.removeAttribute('_mce_new');}});each(dom.select(na).reverse(),function(n){var c=0;each(dom.getAttribs(n),function(an){if(an.nodeName.substring(0,1)!='_'&&dom.getAttrib(n,an.nodeName)!=''){c++;}});if(c==0)dom.remove(n,1);});ed.selection.moveToBookmark(bm);return!!bm;};ed.focus();ed.getDoc().execCommand('FontName',false,'mceinline');replaceFonts();if(kh=t._applyInlineStyle.keyhandler){ed.onKeyUp.remove(kh);ed.onKeyPress.remove(kh);ed.onKeyDown.remove(kh);ed.onSetContent.remove(t._applyInlineStyle.chandler);}if(ed.selection.isCollapsed()){t._pendingStyles=tinymce.extend(t._pendingStyles||{},at.style);t._applyInlineStyle.chandler=ed.onSetContent.add(function(){delete t._pendingStyles;});t._applyInlineStyle.keyhandler=kh=function(e){if(t._pendingStyles){at.style=t._pendingStyles;delete t._pendingStyles;}if(replaceFonts()){ed.onKeyDown.remove(t._applyInlineStyle.keyhandler);ed.onKeyPress.remove(t._applyInlineStyle.keyhandler);}if(e.type=='keyup')ed.onKeyUp.remove(t._applyInlineStyle.keyhandler);};ed.onKeyDown.add(kh);ed.onKeyPress.add(kh);ed.onKeyUp.add(kh);}else t._pendingStyles=0;},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),isBlock);eb=dom.getParent(en||s.getEnd(),isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(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==0||t.index==t.data.length)?t.index-1:t.index];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.index++;if(t.data.length===0&&!l.initial)return null;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,n,eid;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){if(r.startContainer.nodeType==1&&(n=r.startContainer.childNodes[r.startOffset])&&n.nodeType==1){eid=n.getAttribute("id");n.setAttribute("id","__mce");}else{if(ed.dom.getParent(r.startContainer,function(e){return e===b;})){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=b.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){}}}else if(!isIE&&(n=ed.dom.get('__mce'))){if(eid)n.setAttribute('id',eid);else n.removeAttribute('id');r=d.createRange();r.setStartBefore(n);r.setEndBefore(n);se.setRng(r);}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,dom=ed.dom,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=dom.getViewPort(ed.getWin()),y,ch,car;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===en&&/^(TD|TH)$/.test(sn.nodeName)){dom.remove(sn.firstChild);ed.dom.add(sn,se.element,null,'<br />');aft=ed.dom.add(sn,se.element,null,'<br />');r=d.createRange();r.selectNodeContents(aft);r.collapse(1);ed.selection.setRng(r);return false;}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 />';function appendStyles(e,en){var nl=[],nn,n,i;e.innerHTML='';if(se.keep_styles){n=en;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)){nn=n.cloneNode(false);dom.setAttrib(nn,'id','');nl.push(nn);}}while(n=n.parentNode);}if(nl.length>0){for(i=nl.length-1,nn=e;i>=0;i--)nn=nn.appendChild(nl[i]);nl[0].innerHTML=isOpera?'&nbsp;':'<br />';return nl[0];}else e.innerHTML=isOpera?'&nbsp;':'<br />';};if(isEmpty(aft))car=appendStyles(aft,en);if(isOpera&&parseFloat(opera.version())<9.5){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();function first(n){return d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode()||n;};r=d.createRange();r.selectNodeContents(isGecko?first(car||aft):car||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+25);}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){var pr;e=e.target;if(e&&e.parentNode&&e.nodeName=='BR'&&(n=t.getParentBlock(e))){pr=e.previousSibling;Event.remove(b,'DOMNodeInserted',handler);if(pr&&pr.nodeType==3&&/\s+$/.test(pr.nodeValue))return;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(){bm=ed.selection.getBookmark(1);});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.label=ed.translate(s.label);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,cc){s=s||{};s.menu_button=1;return this.createButton(id,s,cc);},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,bm;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();});if(tinymce.isIE){c.onShowMenu.add(function(){bm=ed.selection.getBookmark(1);});c.onHideMenu.add(function(){if(bm){ed.selection.moveToBookmark(bm);bm=0;}});}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;}}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;u=tinymce._addVer(u);try{if(isIE&&mo){w=1;window.showModalDialog(u,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,w){w=w||window;cb.call(s||this,w.confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s,w){var t=this;w=w||window;w.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');}});}()); \ No newline at end of file var tinymce={majorVersion:"3",minorVersion:"2.6",releaseDate:"2009-08-19",_init:function(){var o=this,k=document,l=window,j=navigator,b=j.userAgent,h,a,g,f,e,m;o.isOpera=l.opera&&opera.buildNumber;o.isWebKit=/WebKit/.test(b);o.isIE=!o.isWebKit&&!o.isOpera&&(/MSIE/gi).test(b)&&(/Explorer/gi).test(j.appName);o.isIE6=o.isIE&&/MSIE [56]/.test(b);o.isGecko=!o.isWebKit&&/Gecko/.test(b);o.isMac=b.indexOf("Mac")!=-1;o.isAir=/adobeair/i.test(b);if(l.tinyMCEPreInit){o.suffix=tinyMCEPreInit.suffix;o.baseURL=tinyMCEPreInit.base;o.query=tinyMCEPreInit.query;return}o.suffix="";a=k.getElementsByTagName("base");for(h=0;h<a.length;h++){if(m=a[h].href){if(/^https?:\/\/[^\/]+$/.test(m)){m+="/"}f=m?m.match(/.*\//)[0]:""}}function c(d){if(d.src&&/tiny_mce(|_gzip|_jquery|_prototype)(_dev|_src)?.js/.test(d.src)){if(/_(src|dev)\.js/g.test(d.src)){o.suffix="_src"}if((e=d.src.indexOf("?"))!=-1){o.query=d.src.substring(e+1)}o.baseURL=d.src.substring(0,d.src.lastIndexOf("/"));if(f&&o.baseURL.indexOf("://")==-1&&o.baseURL.indexOf("/")!==0){o.baseURL=f+o.baseURL}return o.baseURL}return null}a=k.getElementsByTagName("script");for(h=0;h<a.length;h++){if(c(a[h])){return}}g=k.getElementsByTagName("head")[0];if(g){a=g.getElementsByTagName("script");for(h=0;h<a.length;h++){if(c(a[h])){return}}}return},is:function(b,a){var c=typeof(b);if(!a){return c!="undefined"}if(a=="array"&&(b.hasOwnProperty&&b instanceof Array)){return true}return c==a},each:function(d,a,c){var e,b;if(!d){return 0}c=c||d;if(typeof(d.length)!="undefined"){for(e=0,b=d.length;e<b;e++){if(a.call(c,d[e],e,d)===false){return 0}}}else{for(e in d){if(d.hasOwnProperty(e)){if(a.call(c,d[e],e,d)===false){return 0}}}}return 1},trim:function(a){return(a?""+a:"").replace(/^\s*|\s*$/g,"")},create:function(j,a){var i=this,b,e,f,g,d,h=0;j=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(j);f=j[3].match(/(^|\.)(\w+)$/i)[2];e=i.createNS(j[3].replace(/\.\w+$/,""));if(e[f]){return}if(j[2]=="static"){e[f]=a;if(this.onCreate){this.onCreate(j[2],j[3],e[f])}return}if(!a[f]){a[f]=function(){};h=1}e[f]=a[f];i.extend(e[f].prototype,a);if(j[5]){b=i.resolve(j[5]).prototype;g=j[5].match(/\.(\w+)$/i)[1];d=e[f];if(h){e[f]=function(){return b[g].apply(this,arguments)}}else{e[f]=function(){this.parent=b[g];return d.apply(this,arguments)}}e[f].prototype[f]=e[f];i.each(b,function(c,k){e[f].prototype[k]=b[k]});i.each(a,function(c,k){if(b[k]){e[f].prototype[k]=function(){this.parent=b[k];return c.apply(this,arguments)}}else{if(k!=f){e[f].prototype[k]=c}}})}i.each(a["static"],function(c,k){e[f][k]=c});if(this.onCreate){this.onCreate(j[2],j[3],e[f].prototype)}},walk:function(c,b,d,a){a=a||this;if(c){if(d){c=c[d]}tinymce.each(c,function(f,e){if(b.call(a,f,e,d)===false){return false}tinymce.walk(f,b,d,a)})}},createNS:function(d,c){var b,a;c=c||window;d=d.split(".");for(b=0;b<d.length;b++){a=d[b];if(!c[a]){c[a]={}}c=c[a]}return c},resolve:function(d,c){var b,a;c=c||window;d=d.split(".");for(b=0,a=d.length;b<a;b++){c=c[d[b]];if(!c){break}}return c},addUnload:function(e,d){var c=this,a=window;e={func:e,scope:d||this};if(!c.unloads){function b(){var f=c.unloads,h,i;if(f){for(i in f){h=f[i];if(h&&h.func){h.func.call(h.scope,1)}}if(a.detachEvent){a.detachEvent("onbeforeunload",g);a.detachEvent("onunload",b)}else{if(a.removeEventListener){a.removeEventListener("unload",b,false)}}c.unloads=h=f=a=b=0;if(window.CollectGarbage){window.CollectGarbage()}}}function g(){var h=document;if(h.readyState=="interactive"){function f(){h.detachEvent("onstop",f);if(b){b()}h=0}if(h){h.attachEvent("onstop",f)}window.setTimeout(function(){if(h){h.detachEvent("onstop",f)}},0)}}if(a.attachEvent){a.attachEvent("onunload",b);a.attachEvent("onbeforeunload",g)}else{if(a.addEventListener){a.addEventListener("unload",b,false)}}c.unloads=[e]}else{c.unloads.push(e)}return e},removeUnload:function(c){var a=this.unloads,b=null;tinymce.each(a,function(e,d){if(e&&e.func==c){a.splice(d,1);b=c;return false}});return b},explode:function(a,b){return a?tinymce.map(a.split(b||","),tinymce.trim):a},_addVer:function(b){var a;if(!this.query){return b}a=(b.indexOf("?")==-1?"?":"&")+this.query;if(b.indexOf("#")==-1){return b+a}return b.replace("#",a+"#")}};window.tinymce=tinymce;tinymce._init();(function(d,c){var b=c.is;if(!window.jQuery){return alert("Load jQuery first!")}c.extend=d.extend;c.extend(c,{map:d.map,grep:function(e,g){return d.grep(e,g||function(){return 1})},inArray:function(e,f){return d.inArray(f,e||[])}});var a={"tinymce.dom.DOMUtils":{select:function(g,f){var e=this;return d.find(g,e.get(f)||e.get(e.settings.root_element)||e.doc,[])},is:function(f,e){return d(this.get(f)).is(e)}}};c.onCreate=function(e,g,f){c.extend(f,a[g])}})(jQuery,tinymce);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,h,d,c;e=tinymce.trim(e);g=f.settings=g||{};if(/^(mailto|tel|news|javascript|about|data):/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^\w*:?\/\//.test(e)){e=(g.base_uri.protocol||"http")+"://mce_host"+f.toAbsPath(g.base_uri.path,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,g=[],d;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(h){if(h){g.push(h)}});e=g;for(c=f.length-1,g=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}g.push(f[c])}c=e.length-b;if(c<=0){return"/"+g.reverse().join("/")+d}return"/"+e.slice(0,c).join("/")+"/"+g.reverse().join("/")+d},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c<e.length;c++){a+=(c>0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){e.call(f.error_scope||f.scope,h,g)};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(c){var e=c.each,b=c.is;var d=c.isWebKit,a=c.isIE;c.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(i,g){var f=this;f.doc=i;f.win=window;f.files={};f.cssFlicker=false;f.counter=0;f.boxModel=!c.isIE||i.compatMode=="CSS1Compat";f.stdMode=i.documentMode===8;f.settings=g=c.extend({keep_values:false,hex_colors:1,process_html:1},g);if(c.isIE6){try{i.execCommand("BackgroundImageCache",false,true)}catch(h){f.cssFlicker=true}}c.addUnload(f.destroy,f)},getRoot:function(){var f=this,g=f.settings;return(g&&f.get(g.root_element))||f.doc.body},getViewPort:function(g){var h,f;g=!g?this.win:g;h=g.document;f=this.boxModel?h.documentElement:h.body;return{x:g.pageXOffset||f.scrollLeft,y:g.pageYOffset||f.scrollTop,w:g.innerWidth||f.clientWidth,h:g.innerHeight||f.clientHeight}},getRect:function(i){var h,f=this,g;i=f.get(i);h=f.getPos(i);g=f.getSize(i);return{x:h.x,y:h.y,w:g.w,h:g.h}},getSize:function(j){var g=this,f,i;j=g.get(j);f=g.getStyle(j,"width");i=g.getStyle(j,"height");if(f.indexOf("px")===-1){f=0}if(i.indexOf("px")===-1){i=0}return{w:parseInt(f)||j.offsetWidth||j.clientWidth,h:parseInt(i)||j.offsetHeight||j.clientHeight}},getParent:function(i,h,g){return this.getParents(i,h,g,false)},getParents:function(p,k,i,m){var h=this,g,j=h.settings,l=[];p=h.get(p);m=m===undefined;if(j.strict_root){i=i||h.getRoot()}if(b(k,"string")){g=k;if(k==="*"){k=function(f){return f.nodeType==1}}else{k=function(f){return h.is(f,g)}}}while(p){if(p==i||!p.nodeType||p.nodeType===9){break}if(!k||k(p)){if(m){l.push(p)}else{return p}}p=p.parentNode}return m?l:null},get:function(f){var g;if(f&&this.doc&&typeof(f)=="string"){g=f;f=this.doc.getElementById(f);if(f&&f.id!==g){return this.doc.getElementsByName(g)[1]}}return f},getNext:function(g,f){return this._findSib(g,f,"nextSibling")},getPrev:function(g,f){return this._findSib(g,f,"previousSibling")},add:function(j,l,f,i,k){var g=this;return this.run(j,function(n){var m,h;m=b(l,"string")?g.doc.createElement(l):l;g.setAttribs(m,f);if(i){if(i.nodeType){m.appendChild(i)}else{g.setHTML(m,i)}}return !k?n.appendChild(m):m})},create:function(i,f,g){return this.add(this.doc.createElement(i),i,f,g,1)},createHTML:function(m,f,j){var l="",i=this,g;l+="<"+m;for(g in f){if(f.hasOwnProperty(g)){l+=" "+g+'="'+i.encode(f[g])+'"'}}if(c.is(j)){return l+">"+j+"</"+m+">"}return l+" />"},remove:function(h,f){var g=this;return this.run(h,function(m){var l,k,j;l=m.parentNode;if(!l){return null}if(f){for(j=m.childNodes.length-1;j>=0;j--){g.insertAfter(m.childNodes[j],m)}}if(g.fixPsuedoLeaks){l=m.cloneNode(true);f="IELeakGarbageBin";k=g.get(f)||g.add(g.doc.body,"div",{id:f,style:"display:none"});k.appendChild(m);k.innerHTML="";return l}return l.removeChild(m)})},setStyle:function(i,f,g){var h=this;return h.run(i,function(l){var k,j;k=l.style;f=f.replace(/-(\D)/g,function(n,m){return m.toUpperCase()});if(h.pixelStyles.test(f)&&(c.is(g,"number")||/^[\-0-9\.]+$/.test(g))){g+="px"}switch(f){case"opacity":if(a){k.filter=g===""?"":"alpha(opacity="+(g*100)+")";if(!i.currentStyle||!i.currentStyle.hasLayout){k.display="inline-block"}}k[f]=k["-moz-opacity"]=k["-khtml-opacity"]=g||"";break;case"float":a?k.styleFloat=g:k.cssFloat=g;break;default:k[f]=g||""}if(h.settings.update_styles){h.setAttrib(l,"mce_style")}})},getStyle:function(i,f,h){i=this.get(i);if(!i){return false}if(this.doc.defaultView&&h){f=f.replace(/[A-Z]/g,function(j){return"-"+j});try{return this.doc.defaultView.getComputedStyle(i,null).getPropertyValue(f)}catch(g){return null}}f=f.replace(/-(\D)/g,function(k,j){return j.toUpperCase()});if(f=="float"){f=a?"styleFloat":"cssFloat"}if(i.currentStyle&&h){return i.currentStyle[f]}return i.style[f]},setStyles:function(i,j){var g=this,h=g.settings,f;f=h.update_styles;h.update_styles=0;e(j,function(k,l){g.setStyle(i,l,k)});h.update_styles=f;if(h.update_styles){g.setAttrib(i,h.cssText)}},setAttrib:function(h,i,f){var g=this;if(!h||!i){return}if(g.settings.strict){i=i.toLowerCase()}return this.run(h,function(k){var j=g.settings;switch(i){case"style":if(!b(f,"string")){e(f,function(l,m){g.setStyle(k,m,l)});return}if(j.keep_values){if(f&&!g._isRes(f)){k.setAttribute("mce_style",f,2)}else{k.removeAttribute("mce_style",2)}}k.style.cssText=f;break;case"class":k.className=f||"";break;case"src":case"href":if(j.keep_values){if(j.url_converter){f=j.url_converter.call(j.url_converter_scope||g,f,i,k)}g.setAttrib(k,"mce_"+i,f,2)}break;case"shape":k.setAttribute("mce_style",f);break}if(b(f)&&f!==null&&f.length!==0){k.setAttribute(i,""+f,2)}else{k.removeAttribute(i,2)}})},setAttribs:function(g,h){var f=this;return this.run(g,function(i){e(h,function(j,k){f.setAttrib(i,k,j)})})},getAttrib:function(i,j,h){var f,g=this;i=g.get(i);if(!i||i.nodeType!==1){return false}if(!b(h)){h=""}if(/^(src|href|style|coords|shape)$/.test(j)){f=i.getAttribute("mce_"+j);if(f){return f}}if(a&&g.props[j]){f=i[g.props[j]];f=f&&f.nodeValue?f.nodeValue:f}if(!f){f=i.getAttribute(j,2)}if(j==="style"){f=f||i.style.cssText;if(f){f=g.serializeStyle(g.parseStyle(f));if(g.settings.keep_values&&!g._isRes(f)){i.setAttribute("mce_style",f)}}}if(d&&j==="class"&&f){f=f.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(a){switch(j){case"rowspan":case"colspan":if(f===1){f=""}break;case"size":if(f==="+0"||f===20||f===0){f=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(f===0){f=""}break;case"hspace":if(f===-1){f=""}break;case"maxlength":case"tabindex":if(f===32768||f===2147483647||f==="32768"){f=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(f===65535){return j}return h;case"shape":f=f.toLowerCase();break;default:if(j.indexOf("on")===0&&f){f=(""+f).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(f!==undefined&&f!==null&&f!=="")?""+f:h},getPos:function(m,i){var g=this,f=0,l=0,j,k=g.doc,h;m=g.get(m);i=i||k.body;if(m){if(a&&!g.stdMode){m=m.getBoundingClientRect();j=g.boxModel?k.documentElement:k.body;f=g.getStyle(g.select("html")[0],"borderWidth");f=(f=="medium"||g.boxModel&&!g.isIE6)&&2||f;m.top+=g.win.self!=g.win.top?2:0;return{x:m.left+j.scrollLeft-f,y:m.top+j.scrollTop-f}}h=m;while(h&&h!=i&&h.nodeType){f+=h.offsetLeft||0;l+=h.offsetTop||0;h=h.offsetParent}h=m.parentNode;while(h&&h!=i&&h.nodeType){f-=h.scrollLeft||0;l-=h.scrollTop||0;h=h.parentNode}}return{x:f,y:l}},parseStyle:function(h){var i=this,j=i.settings,k={};if(!h){return k}function f(w,q,v){var o,u,m,n;o=k[w+"-top"+q];if(!o){return}u=k[w+"-right"+q];if(o!=u){return}m=k[w+"-bottom"+q];if(u!=m){return}n=k[w+"-left"+q];if(m!=n){return}k[v]=n;delete k[w+"-top"+q];delete k[w+"-right"+q];delete k[w+"-bottom"+q];delete k[w+"-left"+q]}function g(n,m,l,p){var o;o=k[m];if(!o){return}o=k[l];if(!o){return}o=k[p];if(!o){return}k[n]=k[m]+" "+k[l]+" "+k[p];delete k[m];delete k[l];delete k[p]}h=h.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");e(h.split(";"),function(m){var l,n=[];if(m){m=m.replace(/_MCE_SEMI_/g,";");m=m.replace(/url\([^\)]+\)/g,function(o){n.push(o);return"url("+n.length+")"});m=m.split(":");l=c.trim(m[1]);l=l.replace(/url\(([^\)]+)\)/g,function(p,o){return n[parseInt(o)-1]});l=l.replace(/rgb\([^\)]+\)/g,function(o){return i.toHex(o)});if(j.url_converter){l=l.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(o,p){return"url("+j.url_converter.call(j.url_converter_scope||i,i.decode(p),"style",null)+")"})}k[c.trim(m[0]).toLowerCase()]=l}});f("border","","border");f("border","-width","border-width");f("border","-color","border-color");f("border","-style","border-style");f("padding","","padding");f("margin","","margin");g("border","border-width","border-style","border-color");if(a){if(k.border=="medium none"){k.border=""}}return k},serializeStyle:function(g){var f="";e(g,function(i,h){if(h&&i){if(c.isGecko&&h.indexOf("-moz-")===0){return}switch(h){case"color":case"background-color":i=i.toLowerCase();break}f+=(f?" ":"")+h+": "+i+";"}});return f},loadCSS:function(f){var h=this,i=h.doc,g;if(!f){f=""}g=h.select("head")[0];e(f.split(","),function(j){var k;if(h.files[j]){return}h.files[j]=true;k=h.create("link",{rel:"stylesheet",href:c._addVer(j)});if(a&&i.documentMode){k.onload=function(){i.recalc();k.onload=null}}g.appendChild(k)})},addClass:function(f,g){return this.run(f,function(h){var i;if(!g){return 0}if(this.hasClass(h,g)){return h.className}i=this.removeClass(h,g);return h.className=(i!=""?(i+" "):"")+g})},removeClass:function(h,i){var f=this,g;return f.run(h,function(k){var j;if(f.hasClass(k,i)){if(!g){g=new RegExp("(^|\\s+)"+i+"(\\s+|$)","g")}j=k.className.replace(g," ");return k.className=c.trim(j!=" "?j:"")}return k.className})},hasClass:function(g,f){g=this.get(g);if(!g||!f){return false}return(" "+g.className+" ").indexOf(" "+f+" ")!==-1},show:function(f){return this.setStyle(f,"display","block")},hide:function(f){return this.setStyle(f,"display","none")},isHidden:function(f){f=this.get(f);return !f||f.style.display=="none"||this.getStyle(f,"display")=="none"},uniqueId:function(f){return(!f?"mce_":f)+(this.counter++)},setHTML:function(i,g){var f=this;return this.run(i,function(m){var h,k,j,q,l,h;g=f.processHTML(g);if(a){function o(){try{m.innerHTML="<br />"+g;m.removeChild(m.firstChild)}catch(n){while(m.firstChild){m.firstChild.removeNode()}h=f.create("div");h.innerHTML="<br />"+g;e(h.childNodes,function(r,p){if(p){m.appendChild(r)}})}}if(f.settings.fix_ie_paragraphs){g=g.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true">&nbsp;</p>')}o();if(f.settings.fix_ie_paragraphs){j=m.getElementsByTagName("p");for(k=j.length-1,h=0;k>=0;k--){q=j[k];if(!q.hasChildNodes()){if(!q.mce_keep){h=1;break}q.removeAttribute("mce_keep")}}}if(h){g=g.replace(/<p ([^>]+)>|<p>/g,'<div $1 mce_tmp="1">');g=g.replace(/<\/p>/g,"</div>");o();if(f.settings.fix_ie_paragraphs){j=m.getElementsByTagName("DIV");for(k=j.length-1;k>=0;k--){q=j[k];if(q.mce_tmp){l=f.doc.createElement("p");q.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(p,n){var r;if(n!=="mce_tmp"){r=q.getAttribute(n);if(!r&&n==="class"){r=q.className}l.setAttribute(n,r)}});for(h=0;h<q.childNodes.length;h++){l.appendChild(q.childNodes[h].cloneNode(true))}q.swapNode(l)}}}}}else{m.innerHTML=g}return g})},processHTML:function(j){var g=this,i=g.settings;if(!i.process_html){return j}if(c.isGecko){j=j.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,"<$1b$2>");j=j.replace(/<(\/?)em>|<em( [^>]+)>/gi,"<$1i$2>")}else{if(a){j=j.replace(/&apos;/g,"&#39;");j=j.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,"")}}j=j.replace(/<a( )([^>]+)\/>|<a\/>/gi,"<a$1$2></a>");if(i.keep_values){if(/<script|noscript|style/i.test(j)){function f(h){h=h.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n");h=h.replace(/^[\r\n]*|[\r\n]*$/g,"");h=h.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,"");h=h.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,"");return h}j=j.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/gi,function(h,l,k){if(!l){l=' type="text/javascript"'}l=l.replace(/src=\"([^\"]+)\"?/i,function(m,n){if(i.url_converter){n=g.encode(i.url_converter.call(i.url_converter_scope||g,g.decode(n),"src","script"))}return'mce_src="'+n+'"'});if(c.trim(k)){k="<!--\n"+f(k)+"\n// -->"}return"<mce:script"+l+">"+k+"</mce:script>"});j=j.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/gi,function(h,l,k){if(k){k="<!--\n"+f(k)+"\n-->"}return"<mce:style"+l+">"+k+"</mce:style><style "+l+' mce_bogus="1">'+k+"</style>"});j=j.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g,function(h,l,k){return"<mce:noscript"+l+"><!--"+g.encode(k).replace(/--/g,"&#45;&#45;")+"--></mce:noscript>"})}j=j.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,"<!--[CDATA[$1]]-->");j=j.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi,function(h,l){function k(o,n,q){var p=q;if(h.indexOf("mce_"+n)!=-1){return o}if(n=="style"){if(g._isRes(q)){return o}if(i.hex_colors){p=p.replace(/rgb\([^\)]+\)/g,function(m){return g.toHex(m)})}if(i.url_converter){p=p.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(m,r){return"url("+g.encode(i.url_converter.call(i.url_converter_scope||g,g.decode(r),n,l))+")"})}}else{if(n!="coords"&&n!="shape"){if(i.url_converter){p=g.encode(i.url_converter.call(i.url_converter_scope||g,g.decode(q),n,l))}}}return" "+n+'="'+q+'" mce_'+n+'="'+p+'"'}h=h.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi,k);h=h.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi,k);return h.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi,k)})}return j},getOuterHTML:function(f){var g;f=this.get(f);if(!f){return null}if(f.outerHTML!==undefined){return f.outerHTML}g=(f.ownerDocument||this.doc).createElement("body");g.appendChild(f.cloneNode(true));return g.innerHTML},setOuterHTML:function(j,g,k){var f=this;function i(m,l,p){var q,o;o=p.createElement("body");o.innerHTML=l;q=o.lastChild;while(q){f.insertAfter(q.cloneNode(true),m);q=q.previousSibling}f.remove(m)}return this.run(j,function(l){l=f.get(l);if(l.nodeType==1){k=k||l.ownerDocument||f.doc;if(a){try{if(a&&l.nodeType==1){l.outerHTML=g}else{i(l,g,k)}}catch(h){i(l,g,k)}}else{i(l,g,k)}}})},decode:function(g){var h,i,f;if(/&[^;]+;/.test(g)){h=this.doc.createElement("div");h.innerHTML=g;i=h.firstChild;f="";if(i){do{f+=i.nodeValue}while(i.nextSibling)}return f||g}return g},encode:function(f){return f?(""+f).replace(/[<>&\"]/g,function(h,g){switch(h){case"&":return"&amp;";case'"':return"&quot;";case"<":return"&lt;";case">":return"&gt;"}return h}):f},insertAfter:function(h,g){var f=this;g=f.get(g);return this.run(h,function(k){var j,i;j=g.parentNode;i=g.nextSibling;if(i){j.insertBefore(k,i)}else{j.appendChild(k)}return k})},isBlock:function(f){if(f.nodeType&&f.nodeType!==1){return false}f=f.nodeName||f;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TR|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(f)},replace:function(i,h,f){var g=this;if(b(h,"array")){i=i.cloneNode(true)}return g.run(h,function(j){if(f){e(j.childNodes,function(k){i.appendChild(k.cloneNode(true))})}if(g.fixPsuedoLeaks&&j.nodeType===1){j.parentNode.insertBefore(i,j);g.remove(j);return i}return j.parentNode.replaceChild(i,j)})},findCommonAncestor:function(h,f){var i=h,g;while(i){g=f;while(g&&i!=g){g=g.parentNode}if(i==g){break}i=i.parentNode}if(!i&&h.ownerDocument){return h.ownerDocument.documentElement}return i},toHex:function(f){var h=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(f);function g(i){i=parseInt(i).toString(16);return i.length>1?i:"0"+i}if(h){f="#"+g(h[1])+g(h[2])+g(h[3]);return f}return f},getClasses:function(){var l=this,g=[],k,m={},n=l.settings.class_filter,j;if(l.classes){return l.classes}function o(f){e(f.imports,function(i){o(i)});e(f.cssRules||f.rules,function(i){switch(i.type||1){case 1:if(i.selectorText){e(i.selectorText.split(","),function(p){p=p.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(p)||!/\.[\w\-]+$/.test(p)){return}j=p;p=p.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(n&&!(p=n(p,j))){return}if(!m[p]){g.push({"class":p});m[p]=1}})}break;case 3:o(i.styleSheet);break}})}try{e(l.doc.styleSheets,o)}catch(h){}if(g.length>0){l.classes=g}return g},run:function(j,i,h){var g=this,k;if(g.doc&&typeof(j)==="string"){j=g.get(j)}if(!j){return false}h=h||this;if(!j.nodeType&&(j.length||j.length===0)){k=[];e(j,function(l,f){if(l){if(typeof(l)=="string"){l=g.doc.getElementById(l)}k.push(i.call(h,l,f))}});return k}return i.call(h,j)},getAttribs:function(g){var f;g=this.get(g);if(!g){return[]}if(a){f=[];if(g.nodeName=="OBJECT"){return g.attributes}g.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(i,h){f.push({specified:1,nodeName:h})});return f}return g.attributes},destroy:function(g){var f=this;if(f.events){f.events.destroy()}f.win=f.doc=f.root=f.events=null;if(!g){c.removeUnload(f.destroy)}},createRng:function(){var f=this.doc;return f.createRange?f.createRange():new c.dom.Range(this)},split:function(k,j,n){var o=this,f=o.createRng(),l,i,m;function g(q,p){q=q[p];if(q&&q[p]&&q[p].nodeType==1&&h(q[p])){o.remove(q[p])}}function h(p){p=o.getOuterHTML(p);p=p.replace(/<(img|hr|table)/gi,"-");p=p.replace(/<[^>]+>/g,"");return p.replace(/[ \t\r\n]+|&nbsp;|&#160;/g,"")==""}if(k&&j){f.setStartBefore(k);f.setEndBefore(j);l=f.extractContents();f=o.createRng();f.setStartAfter(j);f.setEndAfter(k);i=f.extractContents();m=k.parentNode;g(l,"lastChild");if(!h(l)){m.insertBefore(l,k)}if(n){m.replaceChild(n,j)}else{m.insertBefore(j,k)}g(i,"firstChild");if(!h(i)){m.insertBefore(i,k)}o.remove(k);return n||j}},bind:function(j,f,i,h){var g=this;if(!g.events){g.events=new c.dom.EventUtils()}return g.events.add(j,f,i,h||this)},unbind:function(i,f,h){var g=this;if(!g.events){g.events=new c.dom.EventUtils()}return g.events.remove(i,f,h)},_findSib:function(j,g,h){var i=this,k=g;if(j){if(b(k,"string")){k=function(f){return i.is(f,g)}}for(j=j[h];j;j=j[h]){if(k(j)){return j}}}return null},_isRes:function(f){return/^(top|left|bottom|right|width|height)/i.test(f)||/;\s*(top|left|bottom|right|width|height)/i.test(f)}});c.DOM=new c.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(f){var h=0,c=1,e=2,d=tinymce.extend;function g(m,k){var j,l;if(m.parentNode!=k){return -1}for(l=k.firstChild,j=0;l!=m;l=l.nextSibling){j++}return j}function b(k){var j=0;while(k.previousSibling){j++;k=k.previousSibling}return j}function i(j,k){var l;if(j.nodeType==3){return j}if(k<0){return j}l=j.firstChild;while(l!=null&&k>0){--k;l=l.nextSibling}if(l!=null){return l}return j}function a(k){var j=k.doc;d(this,{dom:k,startContainer:j,startOffset:0,endContainer:j,endOffset:0,collapsed:true,commonAncestorContainer:j,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3})}d(a.prototype,{setStart:function(k,j){this._setEndPoint(true,k,j)},setEnd:function(k,j){this._setEndPoint(false,k,j)},setStartBefore:function(j){this.setStart(j.parentNode,b(j))},setStartAfter:function(j){this.setStart(j.parentNode,b(j)+1)},setEndBefore:function(j){this.setEnd(j.parentNode,b(j))},setEndAfter:function(j){this.setEnd(j.parentNode,b(j)+1)},collapse:function(k){var j=this;if(k){j.endContainer=j.startContainer;j.endOffset=j.startOffset}else{j.startContainer=j.endContainer;j.startOffset=j.endOffset}j.collapsed=true},selectNode:function(j){this.setStartBefore(j);this.setEndAfter(j)},selectNodeContents:function(j){this.setStart(j,0);this.setEnd(j,j.nodeType===1?j.childNodes.length:j.nodeValue.length)},compareBoundaryPoints:function(m,n){var l=this,p=l.startContainer,o=l.startOffset,k=l.endContainer,j=l.endOffset;if(m===0){return l._compareBoundaryPoints(p,o,p,o)}if(m===1){return l._compareBoundaryPoints(p,o,k,j)}if(m===2){return l._compareBoundaryPoints(k,j,k,j)}if(m===3){return l._compareBoundaryPoints(k,j,p,o)}},deleteContents:function(){this._traverse(e)},extractContents:function(){return this._traverse(h)},cloneContents:function(){return this._traverse(c)},insertNode:function(m){var j=this,l,k;if(m.nodeType===3||m.nodeType===4){l=j.startContainer.splitText(j.startOffset);j.startContainer.parentNode.insertBefore(m,l)}else{if(j.startContainer.childNodes.length>0){k=j.startContainer.childNodes[j.startOffset]}j.startContainer.insertBefore(m,k)}},surroundContents:function(l){var j=this,k=j.extractContents();j.insertNode(l);l.appendChild(k);j.selectNode(l)},cloneRange:function(){var j=this;return d(new a(j.dom),{startContainer:j.startContainer,startOffset:j.startOffset,endContainer:j.endContainer,endOffset:j.endOffset,collapsed:j.collapsed,commonAncestorContainer:j.commonAncestorContainer})},_isCollapsed:function(){return(this.startContainer==this.endContainer&&this.startOffset==this.endOffset)},_compareBoundaryPoints:function(m,p,k,o){var q,l,j,r,t,s;if(m==k){if(p==o){return 0}else{if(p<o){return -1}else{return 1}}}q=k;while(q&&q.parentNode!=m){q=q.parentNode}if(q){l=0;j=m.firstChild;while(j!=q&&l<p){l++;j=j.nextSibling}if(p<=l){return -1}else{return 1}}q=m;while(q&&q.parentNode!=k){q=q.parentNode}if(q){l=0;j=k.firstChild;while(j!=q&&l<o){l++;j=j.nextSibling}if(l<o){return -1}else{return 1}}r=this.dom.findCommonAncestor(m,k);t=m;while(t&&t.parentNode!=r){t=t.parentNode}if(!t){t=r}s=k;while(s&&s.parentNode!=r){s=s.parentNode}if(!s){s=r}if(t==s){return 0}j=r.firstChild;while(j){if(j==t){return -1}if(j==s){return 1}j=j.nextSibling}},_setEndPoint:function(k,q,p){var l=this,j,m;if(k){l.startContainer=q;l.startOffset=p}else{l.endContainer=q;l.endOffset=p}j=l.endContainer;while(j.parentNode){j=j.parentNode}m=l.startContainer;while(m.parentNode){m=m.parentNode}if(m!=j){l.collapse(k)}else{if(l._compareBoundaryPoints(l.startContainer,l.startOffset,l.endContainer,l.endOffset)>0){l.collapse(k)}}l.collapsed=l._isCollapsed();l.commonAncestorContainer=l.dom.findCommonAncestor(l.startContainer,l.endContainer)},_traverse:function(r){var s=this,q,m=0,v=0,k,o,l,n,j,u;if(s.startContainer==s.endContainer){return s._traverseSameContainer(r)}for(q=s.endContainer,k=q.parentNode;k!=null;q=k,k=k.parentNode){if(k==s.startContainer){return s._traverseCommonStartContainer(q,r)}++m}for(q=s.startContainer,k=q.parentNode;k!=null;q=k,k=k.parentNode){if(k==s.endContainer){return s._traverseCommonEndContainer(q,r)}++v}o=v-m;l=s.startContainer;while(o>0){l=l.parentNode;o--}n=s.endContainer;while(o<0){n=n.parentNode;o++}for(j=l.parentNode,u=n.parentNode;j!=u;j=j.parentNode,u=u.parentNode){l=j;n=u}return s._traverseCommonAncestors(l,n,r)},_traverseSameContainer:function(o){var r=this,q,u,j,k,l,p,m;if(o!=e){q=r.dom.doc.createDocumentFragment()}if(r.startOffset==r.endOffset){return q}if(r.startContainer.nodeType==3){u=r.startContainer.nodeValue;j=u.substring(r.startOffset,r.endOffset);if(o!=c){r.startContainer.deleteData(r.startOffset,r.endOffset-r.startOffset);r.collapse(true)}if(o==e){return null}q.appendChild(r.dom.doc.createTextNode(j));return q}k=i(r.startContainer,r.startOffset);l=r.endOffset-r.startOffset;while(l>0){p=k.nextSibling;m=r._traverseFullySelected(k,o);if(q){q.appendChild(m)}--l;k=p}if(o!=c){r.collapse(true)}return q},_traverseCommonStartContainer:function(j,p){var s=this,r,k,l,m,q,o;if(p!=e){r=s.dom.doc.createDocumentFragment()}k=s._traverseRightBoundary(j,p);if(r){r.appendChild(k)}l=g(j,s.startContainer);m=l-s.startOffset;if(m<=0){if(p!=c){s.setEndBefore(j);s.collapse(false)}return r}k=j.previousSibling;while(m>0){q=k.previousSibling;o=s._traverseFullySelected(k,p);if(r){r.insertBefore(o,r.firstChild)}--m;k=q}if(p!=c){s.setEndBefore(j);s.collapse(false)}return r},_traverseCommonEndContainer:function(m,p){var s=this,r,o,j,k,q,l;if(p!=e){r=s.dom.doc.createDocumentFragment()}j=s._traverseLeftBoundary(m,p);if(r){r.appendChild(j)}o=g(m,s.endContainer);++o;k=s.endOffset-o;j=m.nextSibling;while(k>0){q=j.nextSibling;l=s._traverseFullySelected(j,p);if(r){r.appendChild(l)}--k;j=q}if(p!=c){s.setStartAfter(m);s.collapse(true)}return r},_traverseCommonAncestors:function(p,j,s){var w=this,l,v,o,q,r,k,u,m;if(s!=e){v=w.dom.doc.createDocumentFragment()}l=w._traverseLeftBoundary(p,s);if(v){v.appendChild(l)}o=p.parentNode;q=g(p,o);r=g(j,o);++q;k=r-q;u=p.nextSibling;while(k>0){m=u.nextSibling;l=w._traverseFullySelected(u,s);if(v){v.appendChild(l)}u=m;--k}l=w._traverseRightBoundary(j,s);if(v){v.appendChild(l)}if(s!=c){w.setStartAfter(p);w.collapse(true)}return v},_traverseRightBoundary:function(p,q){var s=this,l=i(s.endContainer,s.endOffset-1),r,o,n,j,k;var m=l!=s.endContainer;if(l==p){return s._traverseNode(l,m,false,q)}r=l.parentNode;o=s._traverseNode(r,false,false,q);while(r!=null){while(l!=null){n=l.previousSibling;j=s._traverseNode(l,m,false,q);if(q!=e){o.insertBefore(j,o.firstChild)}m=true;l=n}if(r==p){return o}l=r.previousSibling;r=r.parentNode;k=s._traverseNode(r,false,false,q);if(q!=e){k.appendChild(o)}o=k}return null},_traverseLeftBoundary:function(p,q){var s=this,m=i(s.startContainer,s.startOffset);var n=m!=s.startContainer,r,o,l,j,k;if(m==p){return s._traverseNode(m,n,true,q)}r=m.parentNode;o=s._traverseNode(r,false,true,q);while(r!=null){while(m!=null){l=m.nextSibling;j=s._traverseNode(m,n,true,q);if(q!=e){o.appendChild(j)}n=true;m=l}if(r==p){return o}m=r.nextSibling;r=r.parentNode;k=s._traverseNode(r,false,true,q);if(q!=e){k.appendChild(o)}o=k}return null},_traverseNode:function(j,o,r,s){var u=this,m,l,p,k,q;if(o){return u._traverseFullySelected(j,s)}if(j.nodeType==3){m=j.nodeValue;if(r){k=u.startOffset;l=m.substring(k);p=m.substring(0,k)}else{k=u.endOffset;l=m.substring(0,k);p=m.substring(k)}if(s!=c){j.nodeValue=p}if(s==e){return null}q=j.cloneNode(false);q.nodeValue=l;return q}if(s==e){return null}return j.cloneNode(false)},_traverseFullySelected:function(l,k){var j=this;if(k!=e){return k==c?l.cloneNode(true):l}l.parentNode.removeChild(l);return null}});f.Range=a})(tinymce.dom);(function(){function a(e){var d=this,h="\uFEFF",b,g;function c(j,i){if(j&&i){if(j.item&&i.item&&j.item(0)===i.item(0)){return 1}if(j.isEqual&&i.isEqual&&i.isEqual(j)){return 1}}return 0}function f(){var m=e.dom,j=e.getRng(),s=m.createRng(),p,k,n,q,o,l;function i(v){var t=v.parentNode.childNodes,u;for(u=t.length-1;u>=0;u--){if(t[u]==v){return u}}return -1}function r(v){var t=j.duplicate(),B,y,u,w,x=0,z=0,A,C;t.collapse(v);B=t.parentElement();t.pasteHTML(h);u=B.childNodes;for(y=0;y<u.length;y++){w=u[y];if(y>0&&(w.nodeType!==3||u[y-1].nodeType!==3)){z++}if(w.nodeType===3){A=w.nodeValue.indexOf(h);if(A!==-1){x+=A;break}x+=w.nodeValue.length}else{x=0}}t.moveStart("character",-1);t.text="";return{index:z,offset:x,parent:B}}n=j.item?j.item(0):j.parentElement();if(n.ownerDocument!=m.doc){return s}if(j.item||!n.hasChildNodes()){s.setStart(n.parentNode,i(n));s.setEnd(s.startContainer,s.startOffset+1);return s}l=e.isCollapsed();p=r(true);k=r(false);p.parent.normalize();k.parent.normalize();q=p.parent.childNodes[Math.min(p.index,p.parent.childNodes.length-1)];if(q.nodeType!=3){s.setStart(p.parent,p.index)}else{s.setStart(p.parent.childNodes[p.index],p.offset)}o=k.parent.childNodes[Math.min(k.index,k.parent.childNodes.length-1)];if(o.nodeType!=3){if(!l){k.index++}s.setEnd(k.parent,k.index)}else{s.setEnd(k.parent.childNodes[k.index],k.offset)}if(!l){q=s.startContainer;if(q.nodeType==1){s.setStart(q,Math.min(s.startOffset,q.childNodes.length))}o=s.endContainer;if(o.nodeType==1){s.setEnd(o,Math.min(s.endOffset,o.childNodes.length))}}d.addRange(s);return s}this.addRange=function(j){var o,m=e.dom.doc.body,p,k,q,l,n,i;q=j.startContainer;l=j.startOffset;n=j.endContainer;i=j.endOffset;o=m.createTextRange();q=q.nodeType==1?q.childNodes[Math.min(l,q.childNodes.length-1)]:q;n=n.nodeType==1?n.childNodes[Math.min(l==i?i:i-1,n.childNodes.length-1)]:n;if(q==n&&q.nodeType==1){if(/^(IMG|TABLE)$/.test(q.nodeName)&&l!=i){o=m.createControlRange();o.addElement(q)}else{o=m.createTextRange();if(!q.hasChildNodes()&&q.canHaveHTML){q.innerHTML=h}o.moveToElementText(q);if(q.innerHTML==h){o.collapse(true);q.removeChild(q.firstChild)}}if(l==i){o.collapse(i<=j.endContainer.childNodes.length-1)}o.select();return}function r(t,v){var u,s,w;if(t.nodeType!=3){return -1}u=t.nodeValue;s=m.createTextRange();t.nodeValue=u.substring(0,v)+h+u.substring(v);s.moveToElementText(t.parentNode);s.findText(h);w=Math.abs(s.moveStart("character",-1048575));t.nodeValue=u;return w}if(j.collapsed){pos=r(q,l);o=m.createTextRange();o.move("character",pos);o.select();return}else{if(q==n&&q.nodeType==3){p=r(q,l);o.move("character",p);o.moveEnd("character",i-l);o.select();return}p=r(q,l);k=r(n,i);o=m.createTextRange();if(p==-1){o.moveToElementText(q);p=0}else{o.move("character",p)}tmpRng=m.createTextRange();if(k==-1){tmpRng.moveToElementText(n)}else{tmpRng.move("character",k)}o.setEndPoint("EndToEnd",tmpRng);o.select();return}};this.getRangeAt=function(){if(!b||!c(g,e.getRng())){b=f();g=e.getRng()}return b};this.destroy=function(){g=b=null}}tinymce.dom.TridentSelection=a})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){var b=a.each;a.create("tinymce.dom.Element",{Element:function(g,e){var c=this,f,d;e=e||{};c.id=g;c.dom=f=e.dom||a.DOM;c.settings=e;if(!a.isIE){d=c.dom.get(c.id)}b(["getPos","getRect","getParent","add","setStyle","getStyle","setStyles","setAttrib","setAttribs","getAttrib","addClass","removeClass","hasClass","getOuterHTML","setOuterHTML","remove","show","hide","isHidden","setHTML","get"],function(h){c[h]=function(){var j=[g],k;for(k=0;k<arguments.length;k++){j.push(arguments[k])}j=f[h].apply(f,j);c.update(h);return j}})},on:function(e,d,c){return a.dom.Event.add(this.id,e,d,c)},getXY:function(){return{x:parseInt(this.getStyle("left")),y:parseInt(this.getStyle("top"))}},getSize:function(){var c=this.dom.get(this.id);return{w:parseInt(this.getStyle("width")||c.clientWidth),h:parseInt(this.getStyle("height")||c.clientHeight)}},moveTo:function(c,d){this.setStyles({left:c,top:d})},moveBy:function(c,e){var d=this.getXY();this.moveTo(d.x+c,d.y+e)},resizeTo:function(c,d){this.setStyles({width:c,height:d})},resizeBy:function(c,e){var d=this.getSize();this.resizeTo(d.w+c,d.h+e)},update:function(d){var e=this,c,f=e.dom;if(a.isIE6&&e.settings.blocker){d=d||"";if(d.indexOf("get")===0||d.indexOf("has")===0||d.indexOf("is")===0){return}if(d=="remove"){f.remove(e.blocker);return}if(!e.blocker){e.blocker=f.uniqueId();c=f.add(e.settings.container||f.getRoot(),"iframe",{id:e.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});f.setStyle(c,"opacity",0)}else{c=f.get(e.blocker)}f.setStyle(c,"left",e.getStyle("left",1));f.setStyle(c,"top",e.getStyle("top",1));f.setStyle(c,"width",e.getStyle("width",1));f.setStyle(c,"height",e.getStyle("height",1));f.setStyle(c,"display",e.getStyle("display",1));f.setStyle(c,"zIndex",parseInt(e.getStyle("zIndex",1)||0)-1)}}})})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}c.addUnload(f.destroy,f)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML=h.item?h.item(0).outerHTML:h.htmlText}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(i,g){var f=this,j=f.getRng(),l,k=f.win.document;g=g||{format:"html"};g.set=true;i=g.content=f.dom.processHTML(i);f.onBeforeSetContent.dispatch(f,g);i=g.content;if(j.insertNode){i+='<span id="__caret">_</span>';j.deleteContents();j.insertNode(f.getRng().createContextualFragment(i));l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndAfter(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var f=this,g=f.getRng(),h;if(a){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(1);h=g.parentElement();if(h&&h.nodeName=="BODY"){return h.firstChild}return h}else{h=g.startContainer;if(h.nodeName=="BODY"){return h.firstChild}return f.dom.getParent(h,"*")}},getEnd:function(){var f=this,g=f.getRng(),h;if(a){if(g.item){return g.item(0)}g=g.duplicate();g.collapse(0);h=g.parentElement();if(h&&h.nodeName=="BODY"){return h.lastChild}return h}else{h=g.endContainer;if(h.nodeName=="BODY"){return h.lastChild}return f.dom.getParent(h,"*")}},getBookmark:function(x){var j=this,m=j.getRng(),f,n,l,u=j.dom.getViewPort(j.win),v,p,z,o,w=-16777215,k,h=j.dom.getRoot(),g=0,i=0,y;n=u.x;l=u.y;if(x){return{rng:m,scrollX:n,scrollY:l}}if(a){if(m.item){v=m.item(0);d(j.dom.select(v.nodeName),function(s,r){if(v==s){p=r;return false}});return{tag:v.nodeName,index:p,scrollX:n,scrollY:l}}f=j.dom.doc.body.createTextRange();f.moveToElementText(h);f.collapse(true);z=Math.abs(f.move("character",w));f=m.duplicate();f.collapse(true);p=Math.abs(f.move("character",w));f=m.duplicate();f.collapse(false);o=Math.abs(f.move("character",w))-p;return{start:p-z,length:o,scrollX:n,scrollY:l}}v=j.getNode();k=j.getSel();if(!k){return null}if(v&&v.nodeName=="IMG"){return{scrollX:n,scrollY:l}}function q(A,D,t){var s=j.dom.doc.createTreeWalker(A,NodeFilter.SHOW_TEXT,null,false),E,B=0,C={};while((E=s.nextNode())!=null){if(E==D){C.start=B}if(E==t){C.end=B;return C}B+=e(E.nodeValue||"").length}return null}if(k.anchorNode==k.focusNode&&k.anchorOffset==k.focusOffset){v=q(h,k.anchorNode,k.focusNode);if(!v){return{scrollX:n,scrollY:l}}e(k.anchorNode.nodeValue||"").replace(/^\s+/,function(r){g=r.length});return{start:Math.max(v.start+k.anchorOffset-g,0),end:Math.max(v.end+k.focusOffset-g,0),scrollX:n,scrollY:l,beg:k.anchorOffset-g==0}}else{v=q(h,m.startContainer,m.endContainer);if(!v){return{scrollX:n,scrollY:l}}return{start:Math.max(v.start+m.startOffset-g,0),end:Math.max(v.end+m.endOffset-i,0),scrollX:n,scrollY:l,beg:m.startOffset-g==0}}},moveToBookmark:function(n){var o=this,g=o.getRng(),p=o.getSel(),j=o.dom.getRoot(),m,h,k;function i(q,t,D){var B=o.dom.doc.createTreeWalker(q,NodeFilter.SHOW_TEXT,null,false),x,s=0,A={},u,C,z,y;while((x=B.nextNode())!=null){z=y=0;k=x.nodeValue||"";h=e(k).length;s+=h;if(s>=t&&!A.startNode){u=t-(s-h);if(n.beg&&u>=h){continue}A.startNode=x;A.startOffset=u+y}if(s>=D){A.endNode=x;A.endOffset=D-(s-h)+y;return A}}return null}if(!n){return false}o.win.scrollTo(n.scrollX,n.scrollY);if(a){if(g=n.rng){try{g.select()}catch(l){}return true}o.win.focus();if(n.tag){g=j.createControlRange();d(o.dom.select(n.tag),function(r,q){if(q==n.index){g.addElement(r)}})}else{try{if(n.start<0){return true}g=p.createRange();g.moveToElementText(j);g.collapse(true);g.moveStart("character",n.start);g.moveEnd("character",n.length)}catch(f){return true}}try{g.select()}catch(l){}return true}if(!p){return false}if(n.rng){p.removeAllRanges();p.addRange(n.rng)}else{if(b(n.start)&&b(n.end)){try{m=i(j,n.start,n.end);if(m){g=o.dom.doc.createRange();g.setStart(m.startNode,m.startOffset);g.setEnd(m.endNode,m.endOffset);p.removeAllRanges();p.addRange(g)}if(!c.isOpera){o.win.focus()}}catch(l){}}}},select:function(g,l){var p=this,f=p.getRng(),q=p.getSel(),o,m,k,j=p.win.document;function h(u,t){var s,r;if(u){s=j.createTreeWalker(u,NodeFilter.SHOW_TEXT,null,false);while(u=s.nextNode()){r=u;if(c.trim(u.nodeValue).length!=0){if(t){return u}else{r=u}}}}return r}if(a){try{o=j.body;if(/^(IMG|TABLE)$/.test(g.nodeName)){f=o.createControlRange();f.addElement(g)}else{f=o.createTextRange();f.moveToElementText(g)}f.select()}catch(i){}}else{if(l){m=h(g,1)||p.dom.select("br:first",g)[0];k=h(g,0)||p.dom.select("br:last",g)[0];if(m&&k){f=j.createRange();if(m.nodeName=="BR"){f.setStartBefore(m)}else{f.setStart(m,0)}if(k.nodeName=="BR"){f.setEndBefore(k)}else{f.setEnd(k,k.nodeValue.length)}}else{f.selectNode(g)}}else{f.selectNode(g)}p.setRng(f)}return g},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}return !g||h.boundingWidth==0||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=a?g.win.document.body.createTextRange():g.win.document.createRange()}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){h.removeAllRanges();h.addRange(i)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var f=this,h=f.getRng(),g=f.getSel(),i;if(!a){if(!h){return f.dom.getRoot()}i=h.commonAncestorContainer;if(!h.collapsed){if(c.isWebKit&&g.anchorNode&&g.anchorNode.nodeType==1){return g.anchorNode.childNodes[g.anchorOffset]}if(h.startContainer==h.endContainer){if(h.startOffset-h.endOffset<2){if(h.startContainer.hasChildNodes()){i=h.startContainer.childNodes[h.startOffset]}}}}return f.dom.getParent(i,"*")}return h.item?h.item(0):h.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,"&gt;")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:0},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("</"+b+">")}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(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("<![CDATA["+b+"]]>");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("<!-- "+b+"-->");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"&lt;";case">":return"&gt;";case"&":return"&amp;";case'"':return"&quot;"}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,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",bool_attrs:/(checked|disabled|readonly|selected|nowrap)/,valid_elements:"*[*]",extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:1,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,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^<br \/>\s*<\//.test(n)){return"</"+o+">"}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,y,w=["ol","ul"],u,t,q,k=/^(OL|UL)$/,z;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p<o.length;p++){if(r.nodeName==o[p]){return r}}}return null}for(y=0;y<w.length;y++){l=i.dom.select(w[y],s.node);for(u=0;u<l.length;u++){t=l[u];q=t.parentNode;if(k.test(q.nodeName)){z=m(t,"LI");if(!z){z=i.dom.create("li");z.innerHTML="&nbsp;";z.appendChild(t);q.insertBefore(z,q.firstChild)}else{z.appendChild(t)}}}}})}if(j.fix_table_elements){i.onPreProcess.add(function(k,l){f(i.dom.select("p table",l.node).reverse(),function(o){var m=i.dom.getParent(o.parentNode,"table,p");if(m.nodeName!="TABLE"){if(d){i.dom.setOuterHTML(o,o.outerHTML)}i.dom.split(m,o)}})})}},setEntities:function(p){var n=this,j,m,h={},o="",k;if(n.entityLookup){return}j=p.split(",");for(m=0;m<j.length;m+=2){k=j[m];if(k==34||k==38||k==60||k==62){continue}h[String.fromCharCode(j[m])]=j[m+1];k=parseInt(j[m]).toString(16);o+="\\u"+"0000".substring(k.length)+k}if(!o){n.settings.entity_encoding="raw";return}n.entitiesRE=new RegExp("["+o+"]","g");n.entityLookup=h},setValidChildRules:function(h){this.childRules=null;this.addValidChildRules(h)},addValidChildRules:function(k){var j=this,l,h,i;if(!k){return}l="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";h="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";i="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";f(k.split(","),function(n){var o=n.split(/\[|\]/),m;n="";f(o[1].split("|"),function(p){if(n){n+="|"}switch(p){case"%itrans":p=h;break;case"%itrans_na":p=h.substring(2);break;case"%istrict":p=l;break;case"%istrict_na":p=l.substring(2);break;case"%btrans":p=i;break;case"%bstrict":p=i;break}n+=p});m=new RegExp("^("+n.toLowerCase()+")$","i");f(o[0].split("/"),function(p){j.childRules=j.childRules||{};j.childRules[p]=m})});k="";f(j.childRules,function(n,m){if(k){k+="|"}k+=m});j.parentElementsRE=new RegExp("^("+k.toLowerCase()+")$","i")},setRules:function(i){var h=this;h._setup();h.rules={};h.wildRules=[];h.validElements={};return h.addRules(i)},addRules:function(i){var h=this,j;if(!i){return}h._setup();f(i.split(","),function(m){var q=m.split(/\[|\]/),l=q[0].split("/"),r,k,o,n=[];if(j){k=e.extend([],j.attribs)}if(q.length>1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t<k.length;t++){if(k[t].name==u[2]){k.splice(t,1);return}}}switch(u[3]){case"=":p.defaultVal=u[4]||"";break;case":":p.forcedVal=u[4];break;case"<":p.validVals=u[4].split("?");break}if(/[*.?]/.test(u[2])){o=o||[];p.nameRE=new RegExp("^"+c(u[2])+"$");o.push(p)}else{p.name=u[2];k.push(p)}n.push(u[2])})}f(l,function(v,u){var w=v.charAt(0),t=1,p={};if(j){if(j.noEmpty){p.noEmpty=j.noEmpty}if(j.fullEnd){p.fullEnd=j.fullEnd}if(j.padd){p.padd=j.padd}}switch(w){case"-":p.noEmpty=true;break;case"+":p.fullEnd=true;break;case"#":p.padd=true;break;default:t=0}l[u]=v=v.substring(t);h.validElements[v]=1;if(/[*.?]/.test(l[0])){p.nameRE=new RegExp("^"+c(l[0])+"$");h.wildRules=h.wildRules||{};h.wildRules.push(p)}else{p.name=l[0];if(l[0]=="@"){j=p}h.rules[v]=p}p.attribs=k;if(r){p.requiredAttribs=r}if(o){v="";f(n,function(s){if(v){v+="|"}v+="("+c(s)+")"});p.validAttribsRE=new RegExp("^"+v.toLowerCase()+"$");p.wildAttribs=o}})});i="";f(h.validElements,function(m,l){if(i){i+="|"}if(l!="@"){i+=l}});h.validElementsRE=new RegExp("^("+c(i.toLowerCase())+")$")},findRule:function(m){var j=this,l=j.rules,h,k;j._setup();k=l[m];if(k){return k}l=j.wildRules;for(h=0;h<l.length;h++){if(l[h].nameRE.test(m)){return l[h]}}return null},findAttribRule:function(h,l){var j,k=h.wildAttribs;for(j=0;j<k.length;j++){if(k[j].nameRE.test(l)){return k[j]}}return null},serialize:function(m,l){var j,i=this,k;i._setup();l=l||{};l.format=l.format||"html";m=m.cloneNode(true);i.processObj=l;if(e.isWebKit){k=m.ownerDocument.implementation.createHTMLDocument("");k.body.appendChild(k.importNode(m))}i.key=""+(parseInt(i.key)+1);if(!l.no_events){l.node=m;i.onPreProcess.dispatch(i,l)}i.writer.reset();i._serializeNode(m,l.getInner);l.content=i.writer.getContent();if(!l.no_events){i.onPostProcess.dispatch(i,l)}i._postProcess(l);l.node=null;return e.trim(l.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<noscript[^>]*>)(.*?)(<\/noscript>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?"<p$1>&#160;</p>":"<p$1>&nbsp;</p>");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.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>");j=j.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>");j=j.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(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"</$1>\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,"<![CDATA[$1]]>");if(k.entity_encoding=="raw"){j=j.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g,"<p$1>\u00a0</p>")}j=j.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return"<noscript"+p+">"+i.dom.decode(o.replace(/<!--|-->/g,""))+"</noscript>"})}n.content=j},_serializeNode:function(D,o){var z=this,A=z.settings,x=z.writer,q,j,u,F,E,G,B,h,y,k,r,C,p,m;if(!A.node_filter||A.node_filter(D)){switch(D.nodeType){case 1:if(D.hasAttribute?D.hasAttribute("mce_bogus"):D.getAttribute("mce_bogus")){return}p=false;q=D.hasChildNodes();k=D.getAttribute("mce_name")||D.nodeName.toLowerCase();if(d){if(D.scopeName!=="HTML"&&D.scopeName!=="html"){k=D.scopeName+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!z.validElementsRE||!z.validElementsRE.test(k)||(z.invalidElementsRE&&z.invalidElementsRE.test(k))||o){p=true;break}if(d){if(A.fix_content_duplication){if(D.mce_serialized==z.key){return}D.mce_serialized=z.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(D.nodeName==="BR"&&D.getAttribute("type")=="_moz"){return}}}if(z.childRules){if(z.parentElementsRE.test(z.elementName)){if(!z.childRules[z.elementName].test(k)){p=true;break}}z.elementName=k}r=z.findRule(k);k=r.name||k;m=A.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){G=r.requiredAttribs;for(F=G.length-1;F>=0;F--){if(this.dom.getAttrib(D,G[F])!==""){break}}if(F==-1){p=true;break}}x.writeStartElement(k);if(r.attribs){for(F=0,B=r.attribs,E=B.length;F<E;F++){G=B[F];y=z._getAttrib(D,G);if(y!==null){x.writeAttribute(G.name,y)}}}if(r.validAttribsRE){B=z.dom.getAttribs(D);for(F=B.length-1;F>-1;F--){h=B[F];if(h.specified){G=h.nodeName.toLowerCase();if(A.invalid_attrs.test(G)||!r.validAttribsRE.test(G)){continue}C=z.findAttribRule(r,G);y=z._getAttrib(D,C,G);if(y!==null){x.writeAttribute(G,y)}}}}if(k==="script"&&e.trim(D.innerHTML)){x.writeText("// ");x.writeCDATA(D.innerHTML.replace(/<!--|-->|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=D.firstChild)&&u.nodeType===1&&D.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("mce_bogus"):u.getAttribute("mce_bogus")){x.writeText("\u00a0")}}else{if(!q){x.writeText("\u00a0")}}}break;case 3:if(z.childRules&&z.parentElementsRE.test(z.elementName)){if(!z.childRules[z.elementName].test(D.nodeName)){return}}return x.writeText(D.nodeValue);case 4:return x.writeCDATA(D.nodeValue);case 8:return x.writeComment(D.nodeValue)}}else{if(D.nodeType==1){q=D.hasChildNodes()}}if(q&&!m){u=D.firstChild;while(u){z._serializeNode(u);z.elementName=k;u=u.nextSibling}}if(!p){if(!m){x.writeFullEndElement()}else{x.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+"<!--mce:"+(j.items.length-1)+"-->"+p}))});return j},_unprotect:function(i,j){i=i.replace(/\<!--mce:([0-9]+)--\>/g,function(k,h){return j.items[parseInt(h)]});j.items=[];return i},_encode:function(m){var j=this,k=j.settings,i;if(k.entity_encoding!=="raw"){if(k.entity_encoding.indexOf("named")!=-1){j.setEntities(k.entities);i=j.entityLookup;m=m.replace(j.entitiesRE,function(h){var l;if(l=i[h]){h="&"+l+";"}return h})}if(k.entity_encoding.indexOf("numeric")!=-1){m=m.replace(/[\u007E-\uFFFF]/g,function(h){return"&#"+h.charCodeAt(0)+";"})}}return m},_setup:function(){var h=this,i=this.settings;if(h.done){return}h.done=1;h.setRules(i.valid_elements);h.addRules(i.extended_valid_elements);h.addValidChildRules(i.valid_child_elements);if(i.invalid_elements){h.invalidElementsRE=new RegExp("^("+c(i.invalid_elements.replace(/,/g,"|").toLowerCase())+")$")}if(i.attrib_value_filter){h.attribValueFilter=i.attribValueFilter}},_getAttrib:function(m,j,h){var l,k;h=h||j.name;if(j.forcedVal&&(k=j.forcedVal)){if(k==="{$uid}"){return this.dom.uniqueId()}return k}k=this.dom.getAttrib(m,h);if(this.settings.bool_attrs.test(h)&&k){k=(""+k).toLowerCase();if(k==="false"||k==="0"){return null}k=h}switch(h){case"rowspan":case"colspan":if(k=="1"){k=""}break}if(this.attribValueFilter){k=this.attribValueFilter(h,k,m)}if(j.validVals){for(l=j.validVals.length-1;l>=0;l--){if(k==j.validVals[l]){break}}if(l==-1){return null}}if(k===""&&typeof(j.defaultVal)!="undefined"){k=j.defaultVal;if(k==="{$uid}"){return this.dom.uniqueId()}return k}else{if(h=="class"&&this.processObj.get){k=k.replace(/\s?mceItem\w+\s?/g,"")}}if(k===""){return null}return k}})})(tinymce);(function(tinymce){var each=tinymce.each,Event=tinymce.dom.Event;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(Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:tinymce._addVer(u),error:t.settings.error,async:false,success:function(co){t.eval(co)}})}else{document.write('<script type="text/javascript" src="'+tinymce._addVer(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.dom.ScriptLoader.loadScript(o.url,function(){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(!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="'+tinymce._addVer(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)}},loadScript:function(u,cb){var id=tinymce.DOM.uniqueId(),e;function done(){Event.clear(id);tinymce.DOM.remove(id);if(cb){cb.call(document,u);cb=0}}if(tinymce.isIE){tinymce.util.XHR.send({url:tinymce._addVer(u),async:false,success:function(co){window.execScript(co);done()}})}else{e=tinymce.DOM.create("script",{id:id,type:"text/javascript",src:tinymce._addVer(u)});Event.add(e,"load",done);(document.getElementsByTagName("head")[0]||document.body).appendChild(e)}}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader()})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(e,d){this.id=e;this.settings=d=d||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=d.scope||this;this.disabled=0;this.active=0},setDisabled:function(d){var f;if(d!=this.disabled){f=b.get(this.id);if(f&&this.settings.unavailable_prefix){if(d){this.prevTitle=f.title;f.title=this.settings.unavailable_prefix+": "+f.title}else{f.title=this.prevTitle}}this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(b,a){this.parent(b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator"},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(w){var h,t,s;w=w.target;if(w&&(w=c.getParent(w,"tr"))){h=z.items[w.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(w&&c.hasClass(w,m+"ItemSub")){t=c.getRect(w);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}z.onShowMenu.dispatch(z);if(A.keyboard_focus){a.add(o,"keydown",z._keyHandler,z);c.select("a","menu_"+z.id)[0].focus();z._focusIdx=0}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);a.remove(h,"mouseover",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000"});k=c.add(g,"div",{id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_keyHandler:function(j){var i=this,h=j.keyCode;function g(m){var k=i._focusIdx+m,l=c.select("a","menu_"+i.id)[k];if(l){i._focusIdx=k;l.focus()}}switch(h){case 38:g(-1);return;case 40:g(1);return;case 13:return;case 27:return this.hideMenu()}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,"td");i=p=c.add(i,"a",{href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(d,c){this.parent(d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" title="'+a.encode(e.title)+'">';if(e.image){d+='<img class="mceIcon" src="'+e.image+'" />'+c+"</a>"}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")+"</a>"}return d},postRender:function(){var c=this,d=c.settings;b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){return d.onclick.call(d.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(h,g){var f=this;f.parent(h,g);f.items=[];f.onChange=new a(f);f.onPostRender=new a(f);f.onAdd=new a(f);f.onRenderMenu=new d.util.Dispatcher(this);f.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var g=this,h,i;if(f!=g.selectedIndex){h=c.get(g.id+"_text");i=g.items[f];if(i){g.selectedValue=i.value;g.selectedIndex=f;c.setHTML(h,c.encode(i.title));c.removeClass(h,"mceTitle")}else{c.setHTML(h,c.encode(g.settings.title));c.addClass(h,"mceTitle");g.selectedValue=g.selectedIndex=null}h=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<table id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("a",{id:f.id+"_text",href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},"<span></span>")+"</td>";i+="</tr></tbody></table>";return i},showMenu:function(){var g=this,j,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}j=c.getPos(this.settings.menu_container);i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(k){if(k.value===g.selectedValue){f.items[k.id].setSelected(1);g.oldID=k.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(g.hideMenu,g);f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){h.id=c.uniqueId();h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id+"_text","focus",function(h){if(!f._focused){f.keyDownHandler=b.add(f.id+"_text","keydown",function(l){var i=-1,j,k=l.keyCode;e(f.items,function(m,n){if(f.selectedValue==m.value){i=n}});if(k==38){j=f.items[i-1]}else{if(k==40){j=f.items[i+1]}else{if(k==13){j=f.selectedValue;f.selectedValue=null;f.settings.onselect(j);return b.cancel(l)}}}if(j){f.hideMenu();f.select(j.value)}})}f._focused=1});b.add(f.id+"_text","blur",function(){b.remove(f.id+"_text","keydown",f.keyDownHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return c.get(this.id).options.length-1},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox"},g);return g},postRender:function(){var g=this,h;g.rendered=true;function f(j){var i=g.items[j.target.selectedIndex-1];if(i&&(i=i.value)){g.onChange.dispatch(g,i);if(g.settings.onselect){g.settings.onselect(i)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(j){var i;b.remove(g.id,"change",h);i=b.add(g.id,"blur",function(){b.add(g.id,"change",f);b.remove(g.id,"blur",i)});if(j.keyCode==13||j.keyCode==32){f(j);return b.cancel(j)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(f,e){this.parent(f,e);this.onRenderMenu=new c.util.Dispatcher(this);e.menu_container=e.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(f.hideMenu,f);f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(f,e){this.parent(f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,"class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}i+="<td>"+b.createHTML("a",{id:f.id+"_action",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]});i+="<td>"+b.createHTML("a",{id:f.id+"_open",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";return b.createHTML("table",{id:f.id,"class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",onmousedown:"return false;",title:g.title},i)},postRender:function(){var e=this,f=e.settings;if(f.onclick){a.add(e.id+"_action","click",function(){if(!e.isDisabled()){f.onclick(e.value)}})}a.add(e.id+"_open","click",e.showMenu,e);a.add(e.id+"_open","focus",function(){e._focused=1});a.add(e.id+"_open","blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(h,g){var f=this;f.parent(h,g);f.settings=g=d.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"},f.settings);f.onShowMenu=new d.util.Dispatcher(f);f.onHideMenu=new d.util.Dispatcher(f);f.value=g.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.onHideMenu.dispatch(f);f.isMenuVisible=0},renderMenu:function(){var k=this,f,j=0,l=k.settings,p,h,o,g;g=c.add(l.menu_container,"div",{id:k.id+"_menu","class":l.menu_class+" "+l["class"],style:"position:absolute;left:0;top:-1000px;"});f=c.add(g,"div",{"class":l["class"]+" mceSplitButtonMenu"});c.add(f,"span",{"class":"mceMenuLine"});p=c.add(f,"table",{"class":"mceColorSplitMenu"});h=c.add(p,"tbody");j=0;e(b(l.colors,"array")?l.colors:l.colors.split(","),function(i){i=i.replace(/^#/,"");if(!j--){o=c.add(h,"tr");j=l.grid_width-1}p=c.add(o,"td");p=c.add(p,"a",{href:"javascript:;",style:{backgroundColor:"#"+i},mce_color:"#"+i})});if(l.more_colors_func){p=c.add(h,"tr");p=c.add(p,"td",{colspan:l.grid_width,"class":"mceMoreColors"});p=c.add(p,"a",{id:k.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},l.more_colors_title);a.add(p,"click",function(i){l.more_colors_func.call(l.more_colors_scope||this);return a.cancel(i)})}c.addClass(f,"mceColorSplitMenu");a.add(k.id+"_menu","click",function(i){var m;i=i.target;if(i.nodeName=="A"&&(m=i.getAttribute("mce_color"))){k.setColor(m)}return a.cancel(i)});return g},setColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g;f.hideMenu();f.settings.onselect(g)},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);tinymce.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var l=this,e="",g,j,b=tinymce.DOM,m=l.settings,d,a,f,k;k=l.controls;for(d=0;d<k.length;d++){j=k[d];a=k[d-1];f=k[d+1];if(d===0){g="mceToolbarStart";if(j.Button){g+=" mceToolbarStartButton"}else{if(j.SplitButton){g+=" mceToolbarStartSplitButton"}else{if(j.ListBox){g+=" mceToolbarStartListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,"<!-- IE -->"))}}if(b.stdMode){e+='<td style="position: relative">'+j.renderHTML()+"</td>"}else{e+="<td>"+j.renderHTML()+"</td>"}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,"<!-- IE -->"))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},"<tbody><tr>"+e+"</tr></tbody>")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(f){var d,e=b.EditorManager.settings;if(e&&e.language){d=this.urls[f]+"/langs/"+e.language+".js";if(!b.dom.Event.domLoaded&&!e.strict_mode){b.ScriptLoader.load(d)}else{b.ScriptLoader.add(d)}}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(f){var g=f.each,h=f.extend,e=f.DOM,a=f.dom.Event,c=f.ThemeManager,b=f.PluginManager,d=f.explode;f.create("static tinymce.EditorManager",{editors:{},i18n:{},activeEditor:null,preInit:function(){var i=this,j=window.location;f.documentBaseURL=j.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(f.documentBaseURL)){f.documentBaseURL+="/"}f.baseURL=new f.util.URI(f.documentBaseURL).toAbsolute(f.baseURL);f.EditorManager.baseURI=new f.util.URI(f.baseURL);i.onBeforeUnload=new f.util.Dispatcher(i);a.add(window,"beforeunload",function(k){i.onBeforeUnload.dispatch(i,k)})},init:function(q){var p=this,l,k=f.ScriptLoader,o,n,i=[],m;function j(u,v,r){var t=u[v];if(!t){return}if(f.is(t,"string")){r=t.replace(/\.\w+$/,"");r=r?f.resolve(r):0;t=f.resolve(t)}return t.apply(r||this,Array.prototype.slice.call(arguments,2))}q=h({theme:"simple",language:"en",strict_loading_mode:document.contentType=="application/xhtml+xml"},q);p.settings=q;if(!a.domLoaded&&!q.strict_loading_mode){if(q.language){k.add(f.baseURL+"/langs/"+q.language+".js")}if(q.theme&&q.theme.charAt(0)!="-"&&!c.urls[q.theme]){c.load(q.theme,"themes/"+q.theme+"/editor_template"+f.suffix+".js")}if(q.plugins){l=d(q.plugins);g(l,function(r){if(r&&r.charAt(0)!="-"&&!b.urls[r]){if(!f.isWebKit&&r=="safari"){return}b.load(r,"plugins/"+r+"/editor_plugin"+f.suffix+".js")}})}k.loadQueue()}a.add(document,"init",function(){var r,t;j(q,"onpageload");if(q.browsers){r=false;g(d(q.browsers),function(u){switch(u){case"ie":case"msie":if(f.isIE){r=true}break;case"gecko":if(f.isGecko){r=true}break;case"safari":case"webkit":if(f.isWebKit){r=true}break;case"opera":if(f.isOpera){r=true}break}});if(!r){return}}switch(q.mode){case"exact":r=q.elements||"";if(r.length>0){g(d(r),function(u){if(e.get(u)){m=new f.Editor(u,q);i.push(m);m.render(1)}else{o=0;g(document.forms,function(v){g(v.elements,function(w){if(w.name===u){u="mce_editor_"+o;e.setAttrib(w,"id",u);m=new f.Editor(u,q);i.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function s(v,u){return u.constructor===RegExp?u.test(v.className):e.hasClass(v,u)}g(e.select("textarea"),function(u){if(q.editor_deselector&&s(u,q.editor_deselector)){return}if(!q.editor_selector||s(u,q.editor_selector)){n=e.get(u.name);if(!u.id&&!n){u.id=u.name}if(!u.id||p.get(u.id)){u.id=e.uniqueId()}m=new f.Editor(u.id,q);i.push(m);m.render(1)}});break}if(q.oninit){r=t=0;g(i,function(u){t++;if(!u.initialized){u.onInit.add(function(){r++;if(r==t){j(q,"oninit")}})}else{r++}if(r==t){j(q,"oninit")}})}})},get:function(i){return this.editors[i]},getInstanceById:function(i){return this.get(i)},add:function(i){this.editors[i.id]=i;this._setActive(i);return i},remove:function(j){var i=this;if(!i.editors[j.id]){return null}delete i.editors[j.id];if(i.activeEditor==j){i._setActive(null);g(i.editors,function(k){i._setActive(k);return false})}j.destroy();return j},execCommand:function(o,m,l){var n=this,k=n.get(l),i;switch(o){case"mceFocus":k.focus();return true;case"mceAddEditor":case"mceAddControl":if(!n.get(l)){new f.Editor(l,n.settings).render()}return true;case"mceAddFrameControl":i=l.window;i.tinyMCE=tinyMCE;i.tinymce=f;f.DOM.doc=i.document;f.DOM.win=i;k=new f.Editor(l.element_id,l);k.render();if(f.isIE){function j(){k.destroy();i.detachEvent("onunload",j);i=i.tinyMCE=i.tinymce=null}i.attachEvent("onunload",j)}l.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(k){k.remove()}return true;case"mceToggleEditor":if(!k){n.execCommand("mceAddControl",0,l);return true}if(k.isHidden()){k.show()}else{k.hide()}return true}if(n.activeEditor){return n.activeEditor.execCommand(o,m,l)}return false},execInstanceCommand:function(m,l,k,j){var i=this.get(m);if(i){return i.execCommand(l,k,j)}return false},triggerSave:function(){g(this.editors,function(i){i.save()})},addI18n:function(k,l){var i,j=this.i18n;if(!f.is(k,"string")){g(k,function(n,m){g(n,function(q,p){g(q,function(s,r){if(p==="common"){j[m+"."+r]=s}else{j[m+"."+p+"."+r]=s}})})})}else{g(l,function(n,m){j[k+"."+m]=n})}},_setActive:function(i){this.selectedInstance=this.activeEditor=i}});f.EditorManager.preInit()})(tinymce);var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(n){var o=n.DOM,k=n.dom.Event,f=n.extend,l=n.util.Dispatcher;var j=n.each,a=n.isGecko,b=n.isIE,e=n.isWebKit;var d=n.is,h=n.ThemeManager,c=n.PluginManager,i=n.EditorManager;var p=n.inArray,m=n.grep,g=n.explode;n.create("tinymce.Editor",{Editor:function(u,r){var q=this;q.id=q.editorId=u;q.execCommands={};q.queryStateCommands={};q.queryValueCommands={};q.isNotDirty=false;q.plugins={};j(["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(s){q[s]=new l(q)});q.settings=r=f({id:u,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:n.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[cite],-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],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|tabindex|accesskey],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",keep_styles:1,fix_table_elements:1,removeformat_selector:"span,b,strong,em,i,font,u,strike"},r);q.documentBaseURI=new n.util.URI(r.document_base_url||n.documentBaseURL,{base_uri:tinyMCE.baseURI});q.baseURI=i.baseURI;q.execCallback("setup",q)},render:function(u){var v=this,w=v.settings,x=v.id,q=n.ScriptLoader;if(!k.domLoaded){k.add(document,"init",function(){v.render()});return}if(!u){w.strict_loading_mode=1;tinyMCE.settings=w}if(!v.getElement()){return}if(w.strict_loading_mode){q.settings.strict_mode=w.strict_loading_mode;n.DOM.settings.strict=1}if(!/TEXTAREA|INPUT/i.test(v.getElement().nodeName)&&w.hidden_input&&o.getParent(x,"form")){o.insertAfter(o.create("input",{type:"hidden",name:x}),x)}if(n.WindowManager){v.windowManager=new n.WindowManager(v)}if(w.encoding=="xml"){v.onGetContent.add(function(s,t){if(t.save){t.content=o.encode(t.content)}})}if(w.add_form_submit_trigger){v.onSubmit.addToTop(function(){if(v.initialized){v.save();v.isNotDirty=1}})}if(w.add_unload_trigger){v._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(v.initialized&&!v.destroyed&&!v.isHidden()){v.save({format:"raw",no_events:true})}})}n.addUnload(v.destroy,v);if(w.submit_patch){v.onBeforeRenderUI.add(function(){var s=v.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){v.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){i.triggerSave();v.isNotDirty=1;return v.formElement._mceOldSubmit(v.formElement)}}s=null})}function r(){if(w.language){q.add(n.baseURL+"/langs/"+w.language+".js")}if(w.theme&&w.theme.charAt(0)!="-"&&!h.urls[w.theme]){h.load(w.theme,"themes/"+w.theme+"/editor_template"+n.suffix+".js")}j(g(w.plugins),function(s){if(s&&s.charAt(0)!="-"&&!c.urls[s]){if(!e&&s=="safari"){return}c.load(s,"plugins/"+s+"/editor_plugin"+n.suffix+".js")}});q.loadQueue(function(){if(!v.removed){v.init()}})}r()},init:function(){var v,F=this,G=F.settings,C,z,B=F.getElement(),r,q,D,y,A,E;i.add(F);if(G.theme){G.theme=G.theme.replace(/-/,"");r=h.get(G.theme);F.theme=new r();if(F.theme.init&&G.init_theme){F.theme.init(F,h.urls[G.theme]||n.documentBaseURL.replace(/\/$/,""))}}j(g(G.plugins.replace(/\-/g,"")),function(w){var H=c.get(w),t=c.urls[w]||n.documentBaseURL.replace(/\/$/,""),s;if(H){s=new H(F,t);F.plugins[w]=s;if(s.init){s.init(F,t)}}});if(G.popup_css!==false){if(G.popup_css){G.popup_css=F.documentBaseURI.toAbsolute(G.popup_css)}else{G.popup_css=F.baseURI.toAbsolute("themes/"+G.theme+"/skins/"+G.skin+"/dialog.css")}}if(G.popup_css_add){G.popup_css+=","+F.documentBaseURI.toAbsolute(G.popup_css_add)}F.controlManager=new n.ControlManager(F);F.undoManager=new n.UndoManager(F);F.undoManager.onAdd.add(function(t,s){if(!s.initial){return F.onChange.dispatch(F,s,t)}});F.undoManager.onUndo.add(function(t,s){return F.onUndo.dispatch(F,s,t)});F.undoManager.onRedo.add(function(t,s){return F.onRedo.dispatch(F,s,t)});if(G.custom_undo_redo){F.onExecCommand.add(function(t,w,u,H,s){if(w!="Undo"&&w!="Redo"&&w!="mceRepaint"&&(!s||!s.skip_undo)){F.undoManager.add()}})}F.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){F.nodeChanged()}});if(a){function x(s,t){if(!t||!t.initial){F.execCommand("mceRepaint")}}F.onUndo.add(x);F.onRedo.add(x);F.onSetContent.add(x)}F.onBeforeRenderUI.dispatch(F,F.controlManager);if(G.render_ui){C=G.width||B.style.width||B.offsetWidth;z=G.height||B.style.height||B.offsetHeight;F.orgDisplay=B.style.display;E=/^[0-9\.]+(|px)$/i;if(E.test(""+C)){C=Math.max(parseInt(C)+(r.deltaWidth||0),100)}if(E.test(""+z)){z=Math.max(parseInt(z)+(r.deltaHeight||0),100)}r=F.theme.renderUI({targetNode:B,width:C,height:z,deltaWidth:G.delta_width,deltaHeight:G.delta_height});F.editorContainer=r.editorContainer}if(document.domain&&location.hostname!=document.domain){n.relaxedDomain=document.domain}o.setStyles(r.sizeContainer||r.editorContainer,{width:C,height:z});z=(r.iframeHeight||z)+(typeof(z)=="number"?(r.deltaHeight||0):"");if(z<100){z=100}F.iframeHTML=G.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(G.document_base_url!=n.documentBaseURL){F.iframeHTML+='<base href="'+F.documentBaseURI.getURI()+'" />'}F.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(n.relaxedDomain){F.iframeHTML+='<script type="text/javascript">document.domain = "'+n.relaxedDomain+'";<\/script>'}y=G.body_id||"tinymce";if(y.indexOf("=")!=-1){y=F.getParam("body_id","","hash");y=y[F.id]||y}A=G.body_class||"";if(A.indexOf("=")!=-1){A=F.getParam("body_class","","hash");A=A[F.id]||""}F.iframeHTML+='</head><body id="'+y+'" class="mceContentBody '+A+'"></body></html>';if(n.relaxedDomain){if(b||(n.isOpera&&parseFloat(opera.version())>=9.5)){D='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+F.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}else{if(n.isOpera){D='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()'}}}v=o.add(r.iframeContainer,"iframe",{id:F.id+"_ifr",src:D||'javascript:""',frameBorder:"0",style:{width:"100%",height:z}});F.contentAreaContainer=r.iframeContainer;o.get(r.editorContainer).style.display=F.orgDisplay;o.get(F.id).style.display="none";if(!b||!n.relaxedDomain){F.setupIframe()}B=v=r=null},setupIframe:function(){var z=this,A=z.settings,u=o.get(z.id),v=z.getDoc(),r,x;if(!b||!n.relaxedDomain){v.open();v.write(z.iframeHTML);v.close()}if(!b){try{if(!A.readonly){v.designMode="On"}}catch(w){}}if(b){x=z.getBody();o.hide(x);if(!A.readonly){x.contentEditable=true}o.show(x)}z.dom=new n.DOM.DOMUtils(z.getDoc(),{keep_values:true,url_converter:z.convertURL,url_converter_scope:z,hex_colors:A.force_hex_style_colors,class_filter:A.class_filter,update_styles:1,fix_ie_paragraphs:1});z.serializer=new n.dom.Serializer(f(A,{valid_elements:A.verify_html===false?"*[*]":A.valid_elements,dom:z.dom}));z.selection=new n.dom.Selection(z.dom,z.getWin(),z.serializer);z.forceBlocks=new n.ForceBlocks(z,{forced_root_block:A.forced_root_block});z.editorCommands=new n.EditorCommands(z);z.serializer.onPreProcess.add(function(s,t){return z.onPreProcess.dispatch(z,t,s)});z.serializer.onPostProcess.add(function(s,t){return z.onPostProcess.dispatch(z,t,s)});z.onPreInit.dispatch(z);if(!A.gecko_spellcheck){z.getBody().spellcheck=0}if(!A.readonly){z._addEvents()}z.controlManager.onPostRender.dispatch(z,z.controlManager);z.onPostRender.dispatch(z);if(A.directionality){z.getBody().dir=A.directionality}if(A.nowrap){z.getBody().style.whiteSpace="nowrap"}if(A.custom_elements){function y(s,t){j(g(A.custom_elements),function(B){var C;if(B.indexOf("~")===0){B=B.substring(1);C="span"}else{C="div"}t.content=t.content.replace(new RegExp("<("+B+")([^>]*)>","g"),"<"+C+' mce_name="$1"$2>');t.content=t.content.replace(new RegExp("</("+B+")>","g"),"</"+C+">")})}z.onBeforeSetContent.add(y);z.onPostProcess.add(function(s,t){if(t.set){y(s,t)}})}if(A.handle_node_change_callback){z.onNodeChange.add(function(t,s,B){z.execCallback("handle_node_change_callback",z.id,B,-1,-1,true,z.selection.isCollapsed())})}if(A.save_callback){z.onSaveContent.add(function(s,B){var t=z.execCallback("save_callback",z.id,B.content,z.getBody());if(t){B.content=t}})}if(A.onchange_callback){z.onChange.add(function(t,s){z.execCallback("onchange_callback",z,s)})}if(A.convert_newlines_to_brs){z.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(A.fix_nesting&&b){z.onBeforeSetContent.add(function(s,t){t.content=z._fixNesting(t.content)})}if(A.preformatted){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(A.verify_css_classes){z.serializer.attribValueFilter=function(D,B){var C,t;if(D=="class"){if(!z.classesRE){t=z.dom.getClasses();if(t.length>0){C="";j(t,function(s){C+=(C?"|":"")+s["class"]});z.classesRE=new RegExp("("+C+")","gi")}}return !z.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(B)||z.classesRE.test(B)?B:""}return B}}if(A.convert_fonts_to_spans){z._convertFonts()}if(A.inline_styles){z._convertInlineElements()}if(A.cleanup_callback){z.onBeforeSetContent.add(function(s,t){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)});z.onPreProcess.add(function(s,t){if(t.set){z.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){z.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});z.onPostProcess.add(function(s,t){if(t.set){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=z.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(A.save_callback){z.onGetContent.add(function(s,t){if(t.save){t.content=z.execCallback("save_callback",z.id,t.content,z.getBody())}})}if(A.handle_event_callback){z.onEvent.add(function(s,t,B){if(z.execCallback("handle_event_callback",t,s,B)===false){k.cancel(t)}})}z.onSetContent.add(function(){z.addVisual(z.getBody())});if(A.padd_empty_editor){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function q(s,t){j(s.dom.select("a"),function(C){var B=C.parentNode;if(s.dom.isBlock(B)&&B.lastChild===C){s.dom.add(B,"br",{mce_bogus:1})}})}z.onExecCommand.add(function(s,t){if(t==="CreateLink"){q(s)}});z.onSetContent.add(z.selection.onSetContent.add(q));if(!A.readonly){try{v.designMode="Off";v.designMode="On"}catch(w){}}}setTimeout(function(){if(z.removed){return}z.load({initial:true,format:(A.cleanup_on_startup?"html":"raw")});z.startContent=z.getContent({format:"raw"});z.undoManager.add({initial:true});z.initialized=true;z.onInit.dispatch(z);z.execCallback("setupcontent_callback",z.id,z.getBody(),z.getDoc());z.execCallback("init_instance_callback",z);z.focus(true);z.nodeChanged({initial:1});if(A.content_css){n.each(g(A.content_css),function(s){z.dom.loadCSS(z.documentBaseURI.toAbsolute(s))})}if(A.auto_focus){setTimeout(function(){var s=i.get(A.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getWin().focus()},100)}},1);u=null},focus:function(r){var u,q=this,s=q.settings.content_editable;if(!r){if(!s&&(!b||q.selection.getNode().ownerDocument!=q.getDoc())){q.getWin().focus()}}if(i.activeEditor!=q){if((u=i.activeEditor)!=null){u.onDeactivate.dispatch(u,q)}q.onActivate.dispatch(q,u)}i._setActive(q)},execCallback:function(v){var q=this,u=q.settings[v],r;if(!u){return}if(q.callbackLookup&&(r=q.callbackLookup[v])){u=r.func;r=r.scope}if(d(u,"string")){r=u.replace(/\.\w+$/,"");r=r?n.resolve(r):0;u=n.resolve(u);q.callbackLookup=q.callbackLookup||{};q.callbackLookup[v]={func:u,scope:r}}return u.apply(r||q,Array.prototype.slice.call(arguments,1))},translate:function(q){var t=this.settings.language||"en",r=i.i18n;if(!q){return""}return r[t+"."+q]||q.replace(/{\#([^}]+)\}/g,function(u,s){return r[t+"."+s]||"{#"+s+"}"})},getLang:function(r,q){return i.i18n[(this.settings.language||"en")+"."+r]||(d(q)?q:"{#"+r+"}")},getParam:function(w,s,q){var t=n.trim,r=d(this.settings[w])?this.settings[w]:s,u;if(q==="hash"){u={};if(d(r,"string")){j(r.indexOf("=")>0?r.split(/[;,](?![^=;,]*(?:[;,]|$))/):r.split(","),function(x){x=x.split("=");if(x.length>1){u[t(x[0])]=t(x[1])}else{u[t(x[0])]=t(x)}})}else{u=r}return u}return r},nodeChanged:function(u){var q=this,r=q.selection,v=r.getNode()||q.getBody();if(q.initialized){q.onNodeChange.dispatch(q,u?u.controlManager||q.controlManager:q.controlManager,b&&v.ownerDocument!=q.getDoc()?q.getBody():v,r.isCollapsed(),u)}},addButton:function(u,r){var q=this;q.buttons=q.buttons||{};q.buttons[u]=r},addCommand:function(t,r,q){this.execCommands[t]={func:r,scope:q||this}},addQueryStateHandler:function(t,r,q){this.queryStateCommands[t]={func:r,scope:q||this}},addQueryValueHandler:function(t,r,q){this.queryValueCommands[t]={func:r,scope:q||this}},addShortcut:function(s,v,q,u){var r=this,w;if(!r.settings.custom_shortcuts){return false}r.shortcuts=r.shortcuts||{};if(d(q,"string")){w=q;q=function(){r.execCommand(w,false,null)}}if(d(q,"object")){w=q;q=function(){r.execCommand(w[0],w[1],w[2])}}j(g(s),function(t){var x={func:q,scope:u||this,desc:v,alt:false,ctrl:false,shift:false};j(g(t,"+"),function(y){switch(y){case"alt":case"ctrl":case"shift":x[y]=true;break;default:x.charCode=y.charCodeAt(0);x.keyCode=y.toUpperCase().charCodeAt(0)}});r.shortcuts[(x.ctrl?"ctrl":"")+","+(x.alt?"alt":"")+","+(x.shift?"shift":"")+","+x.keyCode]=x});return true},execCommand:function(x,w,z,q){var u=this,v=0,y,r;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x)&&(!q||!q.skip_focus)){u.focus()}y={};u.onBeforeExecCommand.dispatch(u,x,w,z,y);if(y.terminate){return false}if(u.execCallback("execcommand_callback",u.id,u.selection.getNode(),x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}if(y=u.execCommands[x]){r=y.func.call(y.scope,w,z);if(r!==true){u.onExecCommand.dispatch(u,x,w,z,q);return r}}j(u.plugins,function(s){if(s.execCommand&&s.execCommand(x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);v=1;return false}});if(v){return true}if(u.theme&&u.theme.execCommand&&u.theme.execCommand(x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}if(n.GlobalCommands.execCommand(u,x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}if(u.editorCommands.execCommand(x,w,z)){u.onExecCommand.dispatch(u,x,w,z,q);return true}u.getDoc().execCommand(x,w,z);u.onExecCommand.dispatch(u,x,w,z,q)},queryCommandState:function(w){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryStateCommands[w]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandState(w);if(v!==-1){return v}try{return this.getDoc().queryCommandState(w)}catch(q){}},queryCommandValue:function(w){var r=this,v,u;if(r._isHidden()){return}if(v=r.queryValueCommands[w]){u=v.func.call(v.scope);if(u!==true){return u}}v=r.editorCommands.queryCommandValue(w);if(d(v)){return v}try{return this.getDoc().queryCommandValue(w)}catch(q){}},show:function(){var q=this;o.show(q.getContainer());o.hide(q.id);q.load()},hide:function(){var q=this,r=q.getDoc();if(b&&r){r.execCommand("SelectAll")}q.save();o.hide(q.getContainer());o.setStyle(q.id,"display",q.orgDisplay)},isHidden:function(){return !o.isHidden(this.id)},setProgressState:function(q,r,s){this.onSetProgressState.dispatch(this,q,r,s);return q},load:function(u){var q=this,s=q.getElement(),r;if(s){u=u||{};u.load=true;r=q.setContent(d(s.value)?s.value:s.innerHTML,u);u.element=s;if(!u.no_events){q.onLoadContent.dispatch(q,u)}u.element=s=null;return r}},save:function(v){var q=this,u=q.getElement(),r,s;if(!u||!q.initialized){return}v=v||{};v.save=true;if(!v.no_events){q.undoManager.typing=0;q.undoManager.add()}v.element=u;r=v.content=q.getContent(v);if(!v.no_events){q.onSaveContent.dispatch(q,v)}r=v.content;if(!/TEXTAREA|INPUT/i.test(u.nodeName)){u.innerHTML=r;if(s=o.getParent(q.id,"form")){j(s.elements,function(t){if(t.name==q.id){t.value=r;return false}})}}else{u.value=r}v.element=u=null;return r},setContent:function(r,s){var q=this;s=s||{};s.format=s.format||"html";s.set=true;s.content=r;if(!s.no_events){q.onBeforeSetContent.dispatch(q,s)}if(!n.isIE&&(r.length===0||/^\s+$/.test(r))){s.content=q.dom.setHTML(q.getBody(),'<br mce_bogus="1" />');s.format="raw"}s.content=q.dom.setHTML(q.getBody(),n.trim(s.content));if(s.format!="raw"&&q.settings.cleanup){s.getInner=true;s.content=q.dom.setHTML(q.getBody(),q.serializer.serialize(q.getBody(),s))}if(!s.no_events){q.onSetContent.dispatch(q,s)}return s.content},getContent:function(s){var q=this,r;s=s||{};s.format=s.format||"html";s.get=true;if(!s.no_events){q.onBeforeGetContent.dispatch(q,s)}if(s.format!="raw"&&q.settings.cleanup){s.getInner=true;r=q.serializer.serialize(q.getBody(),s)}else{r=q.getBody().innerHTML}r=r.replace(/^\s*|\s*$/g,"");s.content=r;if(!s.no_events){q.onGetContent.dispatch(q,s)}return s.content},isDirty:function(){var q=this;return n.trim(q.startContent)!=n.trim(q.getContent({format:"raw",no_events:1}))&&!q.isNotDirty},getContainer:function(){var q=this;if(!q.container){q.container=o.get(q.editorContainer||q.id+"_parent")}return q.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return o.get(this.settings.content_element||this.id)},getWin:function(){var q=this,r;if(!q.contentWindow){r=o.get(q.id+"_ifr");if(r){q.contentWindow=r.contentWindow}}return q.contentWindow},getDoc:function(){var r=this,q;if(!r.contentDocument){q=r.getWin();if(q){r.contentDocument=q.document}}return r.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(q,x,w){var r=this,v=r.settings;if(v.urlconverter_callback){return r.execCallback("urlconverter_callback",q,w,true,x)}if(!v.convert_urls||(w&&w.nodeName=="LINK")||q.indexOf("file:")===0){return q}if(v.relative_urls){return r.documentBaseURI.toRelative(q)}q=r.documentBaseURI.toAbsolute(q,v.remove_script_host);return q},addVisual:function(u){var q=this,r=q.settings;u=u||q.getBody();if(!d(q.hasVisual)){q.hasVisual=r.visual}j(q.dom.select("table,a",u),function(t){var s;switch(t.nodeName){case"TABLE":s=q.dom.getAttrib(t,"border");if(!s||s=="0"){if(q.hasVisual){q.dom.addClass(t,r.visual_table_class)}else{q.dom.removeClass(t,r.visual_table_class)}}return;case"A":s=q.dom.getAttrib(t,"name");if(s){if(q.hasVisual){q.dom.addClass(t,"mceItemAnchor")}else{q.dom.removeClass(t,"mceItemAnchor")}}return}});q.onVisualAid.dispatch(q,u,q.hasVisual)},remove:function(){var q=this,r=q.getContainer();q.removed=1;q.hide();q.execCallback("remove_instance_callback",q);q.onRemove.dispatch(q);q.onExecCommand.listeners=[];i.remove(q);o.remove(r)},destroy:function(r){var q=this;if(q.destroyed){return}if(!r){n.removeUnload(q.destroy);tinyMCE.onBeforeUnload.remove(q._beforeUnload);if(q.theme&&q.theme.destroy){q.theme.destroy()}q.controlManager.destroy();q.selection.destroy();q.dom.destroy();if(!q.settings.content_editable){k.clear(q.getWin());k.clear(q.getDoc())}k.clear(q.getBody());k.clear(q.formElement)}if(q.formElement){q.formElement.submit=q.formElement._mceOldSubmit;q.formElement._mceOldSubmit=null}q.contentAreaContainer=q.formElement=q.container=q.settings.content_element=q.bodyElement=q.contentDocument=q.contentWindow=null;if(q.selection){q.selection=q.selection.win=q.selection.dom=q.selection.dom.doc=null}q.destroyed=1},_addEvents:function(){var w=this,v,y=w.settings,x={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function u(t,A){var s=t.type;if(w.removed){return}if(w.onEvent.dispatch(w,t,A)!==false){w[x[t.fakeType||t.type]].dispatch(w,t,A)}}j(x,function(t,s){switch(s){case"contextmenu":if(n.isOpera){w.dom.bind(w.getBody(),"mousedown",function(A){if(A.ctrlKey){A.fakeType="contextmenu";u(A)}})}else{w.dom.bind(w.getBody(),s,u)}break;case"paste":w.dom.bind(w.getBody(),s,function(A){u(A)});break;case"submit":case"reset":w.dom.bind(w.getElement().form||o.getParent(w.id,"form"),s,u);break;default:w.dom.bind(y.content_editable?w.getBody():w.getDoc(),s,u)}});w.dom.bind(y.content_editable?w.getBody():(a?w.getDoc():w.getWin()),"focus",function(s){w.focus(true)});if(n.isGecko){w.dom.bind(w.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("mce_src"))){t.src=w.documentBaseURI.toAbsolute(s)}})}if(a){function q(){var B=this,D=B.getDoc(),C=B.settings;if(a&&!C.readonly){if(B._isHidden()){try{if(!C.content_editable){D.designMode="On"}}catch(A){}}try{D.execCommand("styleWithCSS",0,false)}catch(A){if(!B._isHidden()){try{D.execCommand("useCSS",0,true)}catch(A){}}}if(!C.table_inline_editing){try{D.execCommand("enableInlineTableEditing",false,false)}catch(A){}}if(!C.object_resizing){try{D.execCommand("enableObjectResizing",false,false)}catch(A){}}}}w.onBeforeExecCommand.add(q);w.onMouseDown.add(q)}w.onMouseUp.add(w.nodeChanged);w.onClick.add(w.nodeChanged);w.onKeyUp.add(function(s,t){var A=t.keyCode;if((A>=33&&A<=36)||(A>=37&&A<=40)||A==13||A==45||A==46||A==8||(n.isMac&&(A==91||A==93))||t.ctrlKey){w.nodeChanged()}});w.onReset.add(function(){w.setContent(w.startContent,{format:"raw"})});if(y.custom_shortcuts){if(y.custom_undo_redo_keyboard_shortcuts){w.addShortcut("ctrl+z",w.getLang("undo_desc"),"Undo");w.addShortcut("ctrl+y",w.getLang("redo_desc"),"Redo")}if(a){w.addShortcut("ctrl+b",w.getLang("bold_desc"),"Bold");w.addShortcut("ctrl+i",w.getLang("italic_desc"),"Italic");w.addShortcut("ctrl+u",w.getLang("underline_desc"),"Underline")}for(v=1;v<=6;v++){w.addShortcut("ctrl+"+v,"",["FormatBlock",false,"<h"+v+">"])}w.addShortcut("ctrl+7","",["FormatBlock",false,"<p>"]);w.addShortcut("ctrl+8","",["FormatBlock",false,"<div>"]);w.addShortcut("ctrl+9","",["FormatBlock",false,"<address>"]);function z(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}j(w.shortcuts,function(A){if(n.isMac&&A.ctrl!=t.metaKey){return}else{if(!n.isMac&&A.ctrl!=t.ctrlKey){return}}if(A.alt!=t.altKey){return}if(A.shift!=t.shiftKey){return}if(t.keyCode==A.keyCode||(t.charCode&&t.charCode==A.charCode)){s=A;return false}});return s}w.onKeyUp.add(function(s,t){var A=z(t);if(A){return k.cancel(t)}});w.onKeyPress.add(function(s,t){var A=z(t);if(A){return k.cancel(t)}});w.onKeyDown.add(function(s,t){var A=z(t);if(A){A.func.call(A.scope);return k.cancel(t)}})}if(n.isIE){w.dom.bind(w.getDoc(),"controlselect",function(A){var t=w.resizeInfo,s;A=A.target;if(A.nodeName!=="IMG"){return}if(t){w.dom.unbind(t.node,t.ev,t.cb)}if(!w.dom.hasClass(A,"mceItemNoResize")){ev="resizeend";s=w.dom.bind(A,ev,function(C){var B;C=C.target;if(B=w.dom.getStyle(C,"width")){w.dom.setAttrib(C,"width",B.replace(/[^0-9%]+/g,""));w.dom.setStyle(C,"width","")}if(B=w.dom.getStyle(C,"height")){w.dom.setAttrib(C,"height",B.replace(/[^0-9%]+/g,""));w.dom.setStyle(C,"height","")}})}else{ev="resizestart";s=w.dom.bind(A,"resizestart",k.cancel,k)}t=w.resizeInfo={node:A,ev:ev,cb:s}});w.onKeyDown.add(function(s,t){switch(t.keyCode){case 8:if(w.selection.getRng().item){w.selection.getRng().item(0).removeNode();return k.cancel(t)}}})}if(n.isOpera){w.onClick.add(function(s,t){k.prevent(t)})}if(y.custom_undo_redo){function r(){w.undoManager.typing=0;w.undoManager.add()}if(n.isIE){w.dom.bind(w.getWin(),"blur",function(s){var t;if(w.selection){t=w.selection.getNode();if(!w.removed&&t.ownerDocument&&t.ownerDocument!=w.getDoc()){r()}}})}else{w.dom.bind(w.getDoc(),"blur",function(){if(w.selection&&!w.removed){r()}})}w.onMouseDown.add(r);w.onKeyUp.add(function(s,t){if((t.keyCode>=33&&t.keyCode<=36)||(t.keyCode>=37&&t.keyCode<=40)||t.keyCode==13||t.keyCode==45||t.ctrlKey){w.undoManager.typing=0;w.undoManager.add()}});w.onKeyDown.add(function(s,t){if((t.keyCode>=33&&t.keyCode<=36)||(t.keyCode>=37&&t.keyCode<=40)||t.keyCode==13||t.keyCode==45){if(w.undoManager.typing){w.undoManager.add();w.undoManager.typing=0}return}if(!w.undoManager.typing){w.undoManager.add();w.undoManager.typing=1}})}},_convertInlineElements:function(){var z=this,B=z.settings,r=z.dom,y,w,u,A,q;function x(s,t){if(!B.inline_styles){return}if(t.get){j(z.dom.select("table,u,strike",t.node),function(v){switch(v.nodeName){case"TABLE":if(y=r.getAttrib(v,"height")){r.setStyle(v,"height",y);r.setAttrib(v,"height","")}break;case"U":case"STRIKE":v.style.textDecoration=v.nodeName=="U"?"underline":"line-through";r.setAttrib(v,"mce_style","");r.setAttrib(v,"mce_name","span");break}})}else{if(t.set){j(z.dom.select("table,span",t.node).reverse(),function(v){if(v.nodeName=="TABLE"){if(y=r.getStyle(v,"height")){r.setAttrib(v,"height",y.replace(/[^0-9%]+/g,""))}}else{if(v.style.textDecoration=="underline"){u="u"}else{if(v.style.textDecoration=="line-through"){u="strike"}else{u=""}}if(u){v.style.textDecoration="";r.setAttrib(v,"mce_style","");w=r.create(u,{style:r.getAttrib(v,"style")});r.replace(w,v,1)}}})}}}z.onPreProcess.add(x);if(!B.cleanup_on_startup){z.onSetContent.add(function(s,t){if(t.initial){x(z,{node:z.getBody(),set:1})}})}},_convertFonts:function(){var w=this,x=w.settings,z=w.dom,v,r,q,u;if(!x.inline_styles){return}v=[8,10,12,14,18,24,36];r=["xx-small","x-small","small","medium","large","x-large","xx-large"];if(q=x.font_size_style_values){q=g(q)}if(u=x.font_size_classes){u=g(u)}function y(B){var C,A,t,s;if(!x.inline_styles){return}t=w.dom.select("font",B);for(s=t.length-1;s>=0;s--){C=t[s];A=z.create("span",{style:z.getAttrib(C,"style"),"class":z.getAttrib(C,"class")});z.setStyles(A,{fontFamily:z.getAttrib(C,"face"),color:z.getAttrib(C,"color"),backgroundColor:C.style.backgroundColor});if(C.size){if(q){z.setStyle(A,"fontSize",q[parseInt(C.size)-1])}else{z.setAttrib(A,"class",u[parseInt(C.size)-1])}}z.setAttrib(A,"mce_style","");z.replace(A,C,1)}}w.onPreProcess.add(function(s,t){if(t.get){y(t.node)}});w.onSetContent.add(function(s,t){if(t.initial){y(t.node)}})},_isHidden:function(){var q;if(!a){return 0}q=this.selection.getSel();return(!q||!q.rangeCount||q.rangeCount==0)},_fixNesting:function(r){var t=[],q;r=r.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(u,s,w){var v;if(s==="/"){if(!t.length){return""}if(w!==t[t.length-1].tag){for(q=t.length-1;q>=0;q--){if(t[q].tag===w){t[q].close=1;break}}return""}else{t.pop();if(t.length&&t[t.length-1].close){u=u+"</"+t[t.length-1].tag+">";t.pop()}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(w)){return u}if(/\/>$/.test(u)){return u}t.push({tag:w})}return u});for(q=t.length-1;q>=0;q--){r+="</"+t[q].tag+">"}return r}})})(tinymce);(function(d){var f=d.each,c=d.isIE,a=d.isGecko,b=d.isOpera,e=d.isWebKit;d.create("tinymce.EditorCommands",{EditorCommands:function(g){this.editor=g},execCommand:function(k,j,l){var h=this,g=h.editor,i;switch(k){case"mceResetDesignMode":case"mceBeginUndoLevel":return true;case"unlink":h.UnLink();return true;case"JustifyLeft":case"JustifyCenter":case"JustifyRight":case"JustifyFull":h.mceJustify(k,k.substring(7).toLowerCase());return true;default:i=this[k];if(i){i.call(this,j,l);return true}}return false},Indent:function(){var g=this.editor,l=g.dom,j=g.selection,k,h,i;h=g.settings.indentation;i=/[a-z%]+$/i.exec(h);h=parseInt(h);if(g.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){f(j.getSelectedBlocks(),function(m){l.setStyle(m,"paddingLeft",(parseInt(m.style.paddingLeft||0)+h)+i)});return}g.getDoc().execCommand("Indent",false,null);if(c){l.getParent(j.getNode(),function(m){if(m.nodeName=="BLOCKQUOTE"){m.dir=m.style.cssText=""}})}},Outdent:function(){var h=this.editor,m=h.dom,k=h.selection,l,g,i,j;i=h.settings.indentation;j=/[a-z%]+$/i.exec(i);i=parseInt(i);if(h.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){f(k.getSelectedBlocks(),function(n){g=Math.max(0,parseInt(n.style.paddingLeft||0)-i);m.setStyle(n,"paddingLeft",g?g+j:"")});return}h.getDoc().execCommand("Outdent",false,null)},mceSetContent:function(h,g){this.editor.setContent(g)},mceToggleVisualAid:function(){var g=this.editor;g.hasVisual=!g.hasVisual;g.addVisual()},mceReplaceContent:function(h,g){var i=this.editor.selection;i.setContent(g.replace(/\{\$selection\}/g,i.getContent({format:"text"})))},mceInsertLink:function(i,h){var g=this.editor,j=g.selection,k=g.dom.getParent(j.getNode(),"a");if(d.is(h,"string")){h={href:h}}function l(m){f(h,function(o,n){g.dom.setAttrib(m,n,o)})}if(!k){g.execCommand("CreateLink",false,"javascript:mctmp(0);");f(g.dom.select("a[href=javascript:mctmp(0);]"),function(m){l(m)})}else{if(h.href){l(k)}else{g.dom.remove(k,1)}}},UnLink:function(){var g=this.editor,h=g.selection;if(h.isCollapsed()){h.select(h.getNode())}g.getDoc().execCommand("unlink",false,null);h.collapse(0)},FontName:function(i,h){var j=this,g=j.editor,k=g.selection,l;if(!h){if(k.isCollapsed()){k.select(k.getNode())}}else{if(g.settings.convert_fonts_to_spans){j._applyInlineStyle("span",{style:{fontFamily:h}})}else{g.getDoc().execCommand("FontName",false,h)}}},FontSize:function(j,i){var h=this.editor,l=h.settings,k,g;if(l.convert_fonts_to_spans&&i>=1&&i<=7){g=d.explode(l.font_size_style_values);k=d.explode(l.font_size_classes);if(k){i=k[i-1]||i}else{i=g[i-1]||i}}if(i>=1&&i<=7){h.getDoc().execCommand("FontSize",false,i)}else{this._applyInlineStyle("span",{style:{fontSize:i}})}},queryCommandValue:function(h){var g=this["queryValue"+h];if(g){return g.call(this,h)}return false},queryCommandState:function(h){var g;switch(h){case"JustifyLeft":case"JustifyCenter":case"JustifyRight":case"JustifyFull":return this.queryStateJustify(h,h.substring(7).toLowerCase());default:if(g=this["queryState"+h]){return g.call(this,h)}}return -1},_queryState:function(h){try{return this.editor.getDoc().queryCommandState(h)}catch(g){}},_queryVal:function(h){try{return this.editor.getDoc().queryCommandValue(h)}catch(g){}},queryValueFontSize:function(){var h=this.editor,g=0,i;if(i=h.dom.getParent(h.selection.getNode(),"span")){g=i.style.fontSize}if(!g&&(b||e)){if(i=h.dom.getParent(h.selection.getNode(),"font")){g=i.size}return g}return g||this._queryVal("FontSize")},queryValueFontName:function(){var h=this.editor,g=0,i;if(i=h.dom.getParent(h.selection.getNode(),"font")){g=i.face}if(i=h.dom.getParent(h.selection.getNode(),"span")){g=i.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}if(!g){g=this._queryVal("FontName")}return g},mceJustify:function(o,p){var k=this.editor,m=k.selection,g=m.getNode(),q=g.nodeName,h,j,i=k.dom,l;if(k.settings.inline_styles&&this.queryStateJustify(o,p)){l=1}h=i.getParent(g,k.dom.isBlock);if(q=="IMG"){if(p=="full"){return}if(l){if(p=="center"){i.setStyle(h||g.parentNode,"textAlign","")}i.setStyle(g,"float","");this.mceRepaint();return}if(p=="center"){if(h&&/^(TD|TH)$/.test(h.nodeName)){h=0}if(!h||h.childNodes.length>1){j=i.create("p");j.appendChild(g.cloneNode(false));if(h){i.insertAfter(j,h)}else{i.insertAfter(j,g)}i.remove(g);g=j.firstChild;h=j}i.setStyle(h,"textAlign",p);i.setStyle(g,"float","")}else{i.setStyle(g,"float",p);i.setStyle(h||g.parentNode,"textAlign","")}this.mceRepaint();return}if(k.settings.inline_styles&&k.settings.forced_root_block){if(l){p=""}f(m.getSelectedBlocks(i.getParent(m.getStart(),i.isBlock),i.getParent(m.getEnd(),i.isBlock)),function(n){i.setAttrib(n,"align","");i.setStyle(n,"textAlign",p=="full"?"justify":p)});return}else{if(!l){k.getDoc().execCommand(o,false,null)}}if(k.settings.inline_styles){if(l){i.getParent(k.selection.getNode(),function(r){if(r.style&&r.style.textAlign){i.setStyle(r,"textAlign","")}});return}f(i.select("*"),function(s){var r=s.align;if(r){if(r=="full"){r="justify"}i.setStyle(s,"textAlign",r);i.setAttrib(s,"align","")}})}},mceSetCSSClass:function(h,g){this.mceSetStyleInfo(0,{command:"setattrib",name:"class",value:g})},getSelectedElement:function(){var w=this,o=w.editor,n=o.dom,s=o.selection,h=s.getRng(),l,k,u,p,j,g,q,i,x,v;if(s.isCollapsed()||h.item){return s.getNode()}v=o.settings.merge_styles_invalid_parents;if(d.is(v,"string")){v=new RegExp(v,"i")}if(c){l=h.duplicate();l.collapse(true);u=l.parentElement();k=h.duplicate();k.collapse(false);p=k.parentElement();if(u!=p){l.move("character",1);u=l.parentElement()}if(u==p){l=h.duplicate();l.moveToElementText(u);if(l.compareEndPoints("StartToStart",h)==0&&l.compareEndPoints("EndToEnd",h)==0){return v&&v.test(u.nodeName)?null:u}}}else{function m(r){return n.getParent(r,"*")}u=h.startContainer;p=h.endContainer;j=h.startOffset;g=h.endOffset;if(!h.collapsed){if(u==p){if(j-g<2){if(u.hasChildNodes()){i=u.childNodes[j];return v&&v.test(i.nodeName)?null:i}}}}if(u.nodeType!=3||p.nodeType!=3){return null}if(j==0){i=m(u);if(i&&i.firstChild!=u){i=null}}if(j==u.nodeValue.length){q=u.nextSibling;if(q&&q.nodeType==1){i=u.nextSibling}}if(g==0){q=p.previousSibling;if(q&&q.nodeType==1){x=q}}if(g==p.nodeValue.length){x=m(p);if(x&&x.lastChild!=p){x=null}}if(i==x){return v&&i&&v.test(i.nodeName)?null:i}}return null},mceSetStyleInfo:function(n,m){var q=this,h=q.editor,j=h.getDoc(),g=h.dom,i,k,r=h.selection,p=m.wrapper||"span",k=r.getBookmark(),o;function l(t,s){if(t.nodeType==1){switch(m.command){case"setattrib":return g.setAttrib(t,m.name,m.value);case"setstyle":return g.setStyle(t,m.name,m.value);case"removeformat":return g.setAttrib(t,"class","")}}}o=h.settings.merge_styles_invalid_parents;if(d.is(o,"string")){o=new RegExp(o,"i")}if((i=q.getSelectedElement())&&!h.settings.force_span_wrappers){l(i,1)}else{j.execCommand("FontName",false,"__");f(g.select("span,font"),function(u){var s,t;if(g.getAttrib(u,"face")=="__"||u.style.fontFamily==="__"){s=g.create(p,{mce_new:"1"});l(s);f(u.childNodes,function(v){s.appendChild(v.cloneNode(true))});g.replace(s,u)}})}f(g.select(p).reverse(),function(t){var s=t.parentNode;if(!g.getAttrib(t,"mce_new")){s=g.getParent(t,"*[mce_new]");if(s){g.remove(t,1)}}});f(g.select(p).reverse(),function(t){var s=t.parentNode;if(!s||!g.getAttrib(t,"mce_new")){return}if(h.settings.force_span_wrappers&&s.nodeName!="SPAN"){return}if(s.nodeName==p.toUpperCase()&&s.childNodes.length==1){return g.remove(s,1)}if(t.nodeType==1&&(!o||!o.test(s.nodeName))&&s.childNodes.length==1){l(s);g.setAttrib(t,"class","")}});f(g.select(p).reverse(),function(s){if(g.getAttrib(s,"mce_new")||(g.getAttribs(s).length<=1&&s.className==="")){if(!g.getAttrib(s,"class")&&!g.getAttrib(s,"style")){return g.remove(s,1)}g.setAttrib(s,"mce_new","")}});r.moveToBookmark(k)},queryStateJustify:function(k,h){var g=this.editor,j=g.selection.getNode(),i=g.dom;if(j&&j.nodeName=="IMG"){if(i.getStyle(j,"float")==h){return 1}return j.parentNode.style.textAlign==h}j=i.getParent(g.selection.getStart(),function(l){return l.nodeType==1&&l.style.textAlign});if(h=="full"){h="justify"}if(g.settings.inline_styles){return(j&&j.style.textAlign==h)}return this._queryState(k)},ForeColor:function(i,h){var g=this.editor;if(g.settings.convert_fonts_to_spans){this._applyInlineStyle("span",{style:{color:h}});return}else{g.getDoc().execCommand("ForeColor",false,h)}},HiliteColor:function(i,k){var h=this,g=h.editor,j=g.getDoc();if(g.settings.convert_fonts_to_spans){this._applyInlineStyle("span",{style:{backgroundColor:k}});return}function l(n){if(!a){return}try{j.execCommand("styleWithCSS",0,n)}catch(m){j.execCommand("useCSS",0,!n)}}if(a||b){l(true);j.execCommand("hilitecolor",false,k);l(false)}else{j.execCommand("BackColor",false,k)}},FormatBlock:function(n,h){var o=this,l=o.editor,p=l.selection,j=l.dom,g,k,m;function i(q){return/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(q.nodeName)}g=j.getParent(p.getNode(),function(q){return i(q)});if(g){if((c&&i(g.parentNode))||g.nodeName=="DIV"){k=l.dom.create(h);f(j.getAttribs(g),function(q){j.setAttrib(k,q.nodeName,j.getAttrib(g,q.nodeName))});m=p.getBookmark();j.replace(k,g,1);p.moveToBookmark(m);l.nodeChanged();return}}h=l.settings.forced_root_block?(h||"<p>"):h;if(h.indexOf("<")==-1){h="<"+h+">"}if(d.isGecko){h=h.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,"$1")}l.getDoc().execCommand("FormatBlock",false,h)},mceCleanup:function(){var h=this.editor,i=h.selection,g=i.getBookmark();h.setContent(h.getContent());i.moveToBookmark(g)},mceRemoveNode:function(j,k){var h=this.editor,i=h.selection,g,l=k||i.getNode();if(l==h.getBody()){return}g=i.getBookmark();h.dom.remove(l,1);i.moveToBookmark(g);h.nodeChanged()},mceSelectNodeDepth:function(i,j){var g=this.editor,h=g.selection,k=0;g.dom.getParent(h.getNode(),function(l){if(l.nodeType==1&&k++==j){h.select(l);g.nodeChanged();return false}},g.getBody())},mceSelectNode:function(h,g){this.editor.selection.select(g)},mceInsertContent:function(g,h){this.editor.selection.setContent(h)},mceInsertRawHTML:function(h,i){var g=this.editor;g.selection.setContent("tiny_mce_marker");g.setContent(g.getContent().replace(/tiny_mce_marker/g,i))},mceRepaint:function(){var i,g,j=this.editor;if(d.isGecko){try{i=j.selection;g=i.getBookmark(true);if(i.getSel()){i.getSel().selectAllChildren(j.getBody())}i.collapse(true);i.moveToBookmark(g)}catch(h){}}},queryStateUnderline:function(){var g=this.editor,h=g.selection.getNode();if(h&&h.nodeName=="A"){return false}return this._queryState("Underline")},queryStateOutdent:function(){var g=this.editor,h;if(g.settings.inline_styles){if((h=g.dom.getParent(g.selection.getStart(),g.dom.isBlock))&&parseInt(h.style.paddingLeft)>0){return true}if((h=g.dom.getParent(g.selection.getEnd(),g.dom.isBlock))&&parseInt(h.style.paddingLeft)>0){return true}}return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList()||(!g.settings.inline_styles&&!!g.dom.getParent(g.selection.getNode(),"BLOCKQUOTE"))},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(g){return g.nodeName==="BLOCKQUOTE"})},_applyInlineStyle:function(o,j,m){var q=this,n=q.editor,l=n.dom,i,p={},k,r;o=o.toUpperCase();if(m&&m.check_classes&&j["class"]){m.check_classes.push(j["class"])}function h(){f(l.select(o).reverse(),function(t){var s=0;f(l.getAttribs(t),function(u){if(u.nodeName.substring(0,1)!="_"&&l.getAttrib(t,u.nodeName)!=""){s++}});if(s==0){l.remove(t,1)}})}function g(){var s;f(l.select("span,font"),function(t){if(t.style.fontFamily=="mceinline"||t.face=="mceinline"){if(!s){s=n.selection.getBookmark()}j._mce_new="1";l.replace(l.create(o,j),t,1)}});f(l.select(o+"[_mce_new]"),function(u){function t(v){if(v.nodeType==1){f(j.style,function(x,w){l.setStyle(v,w,"")});if(j["class"]&&v.className&&m){f(m.check_classes,function(w){if(l.hasClass(v,w)){l.removeClass(v,w)}})}}}f(l.select(o,u),t);if(u.parentNode&&u.parentNode.nodeType==1&&u.parentNode.childNodes.length==1){t(u.parentNode)}l.getParent(u.parentNode,function(v){if(v.nodeType==1){if(j.style){f(j.style,function(y,x){var w;if(!p[x]&&(w=l.getStyle(v,x))){if(w===y){l.setStyle(u,x,"")}p[x]=1}})}if(j["class"]&&v.className&&m){f(m.check_classes,function(w){if(l.hasClass(v,w)){l.removeClass(u,w)}})}}return false});u.removeAttribute("_mce_new")});h();n.selection.moveToBookmark(s);return !!s}n.focus();n.getDoc().execCommand("FontName",false,"mceinline");g();if(k=q._applyInlineStyle.keyhandler){n.onKeyUp.remove(k);n.onKeyPress.remove(k);n.onKeyDown.remove(k);n.onSetContent.remove(q._applyInlineStyle.chandler)}if(n.selection.isCollapsed()){if(!c){f(l.getParents(n.selection.getNode(),"span"),function(s){f(j.style,function(u,t){var w;if(w=l.getStyle(s,t)){if(w==u){l.setStyle(s,t,"");r=2;return false}r=1;return false}});if(r){return false}});if(r==2){i=n.selection.getBookmark();h();n.selection.moveToBookmark(i);window.setTimeout(function(){n.nodeChanged()},1);return}}q._pendingStyles=d.extend(q._pendingStyles||{},j.style);q._applyInlineStyle.chandler=n.onSetContent.add(function(){delete q._pendingStyles});q._applyInlineStyle.keyhandler=k=function(s){if(q._pendingStyles){j.style=q._pendingStyles;delete q._pendingStyles}if(g()){n.onKeyDown.remove(q._applyInlineStyle.keyhandler);n.onKeyPress.remove(q._applyInlineStyle.keyhandler)}if(s.type=="keyup"){n.onKeyUp.remove(q._applyInlineStyle.keyhandler)}};n.onKeyDown.add(k);n.onKeyPress.add(k);n.onKeyUp.add(k)}else{q._pendingStyles=0}}})})(tinymce);(function(a){a.create("tinymce.UndoManager",{index:0,data:null,typing:0,UndoManager:function(c){var d=this,b=a.util.Dispatcher;d.editor=c;d.data=[];d.onAdd=new b(this);d.onUndo=new b(this);d.onRedo=new b(this)},add:function(d){var g=this,f,e=g.editor,c,h=e.settings,j;d=d||{};d.content=d.content||e.getContent({format:"raw",no_events:1});d.content=d.content.replace(/^\s*|\s*$/g,"");j=g.data[g.index>0&&(g.index==0||g.index==g.data.length)?g.index-1:g.index];if(!d.initial&&j&&d.content==j.content){return null}if(h.custom_undo_redo_levels){if(g.data.length>h.custom_undo_redo_levels){for(f=0;f<g.data.length-1;f++){g.data[f]=g.data[f+1]}g.data.length--;g.index=g.data.length}}if(h.custom_undo_redo_restore_selection&&!d.initial){d.bookmark=c=d.bookmark||e.selection.getBookmark()}if(g.index<g.data.length){g.index++}if(g.data.length===0&&!d.initial){return null}g.data.length=g.index+1;g.data[g.index++]=d;if(d.initial){g.index=0}if(g.data.length==2&&g.data[0].initial){g.data[0].bookmark=c}g.onAdd.dispatch(g,d);e.isNotDirty=0;return d},undo:function(){var e=this,c=e.editor,b=b,d;if(e.typing){e.add();e.typing=0}if(e.index>0){if(e.index==e.data.length&&e.index>1){d=e.index;e.typing=0;if(!e.add()){e.index=d}--e.index}b=e.data[--e.index];c.setContent(b.content,{format:"raw"});c.selection.moveToBookmark(b.bookmark);e.onUndo.dispatch(e,b)}return b},redo:function(){var d=this,c=d.editor,b=null;if(d.index<d.data.length-1){b=d.data[++d.index];c.setContent(b.content,{format:"raw"});c.selection.moveToBookmark(b.bookmark);d.onRedo.dispatch(d,b)}return b},clear:function(){var b=this;b.data=[];b.index=0;b.typing=0;b.add({initial:true})},hasUndo:function(){return this.index!=0||this.typing},hasRedo:function(){return this.index<this.data.length-1}})})(tinymce);(function(i){var h,c,a,b,g,f;h=i.dom.Event;c=i.isIE;a=i.isGecko;b=i.isOpera;g=i.each;f=i.extend;function e(k,l){var j=l.ownerDocument.createRange();j.setStart(k.endContainer,k.endOffset);j.setEndAfter(l);return j.cloneContents().textContent.length==0}function d(j){j=j.innerHTML;j=j.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi,"-");j=j.replace(/<[^>]+>/g,"");return j.replace(/[ \t\r\n]+/g,"")==""}i.create("tinymce.ForceBlocks",{ForceBlocks:function(k){var l=this,m=k.settings,n;l.editor=k;l.dom=k.dom;n=(m.forced_root_block||"p").toLowerCase();m.element=n.toUpperCase();k.onPreInit.add(l.setup,l);l.reOpera=new RegExp("(\\u00a0|&#160;|&nbsp;)</"+n+">","gi");l.rePadd=new RegExp("<p( )([^>]+)><\\/p>|<p( )([^>]+)\\/>|<p( )([^>]+)>\\s+<\\/p>|<p><\\/p>|<p\\/>|<p>\\s+<\\/p>".replace(/p/g,n),"gi");l.reNbsp2BR1=new RegExp("<p( )([^>]+)>[\\s\\u00a0]+<\\/p>|<p>[\\s\\u00a0]+<\\/p>".replace(/p/g,n),"gi");l.reNbsp2BR2=new RegExp("<%p()([^>]+)>(&nbsp;|&#160;)<\\/%p>|<%p>(&nbsp;|&#160;)<\\/%p>".replace(/%p/g,n),"gi");l.reBR2Nbsp=new RegExp("<p( )([^>]+)>\\s*<br \\/>\\s*<\\/p>|<p>\\s*<br \\/>\\s*<\\/p>".replace(/p/g,n),"gi");function j(p,q){if(b){q.content=q.content.replace(l.reOpera,"</"+n+">")}q.content=q.content.replace(l.rePadd,"<"+n+"$1$2$3$4$5$6>\u00a0</"+n+">");if(!c&&!b&&q.set){q.content=q.content.replace(l.reNbsp2BR1,"<"+n+"$1$2><br /></"+n+">");q.content=q.content.replace(l.reNbsp2BR2,"<"+n+"$1$2><br /></"+n+">")}else{q.content=q.content.replace(l.reBR2Nbsp,"<"+n+"$1$2>\u00a0</"+n+">")}}k.onBeforeSetContent.add(j);k.onPostProcess.add(j);if(m.forced_root_block){k.onInit.add(l.forceRoots,l);k.onSetContent.add(l.forceRoots,l);k.onBeforeGetContent.add(l.forceRoots,l)}},setup:function(){var k=this,j=k.editor,l=j.settings;if(l.forced_root_block){j.onKeyUp.add(k.forceRoots,k);j.onPreProcess.add(k.forceRoots,k)}if(l.force_br_newlines){if(c){j.onKeyPress.add(function(o,q){var r,p=o.selection;if(q.keyCode==13&&p.getNode().nodeName!="LI"){p.setContent('<br id="__" /> ',{format:"raw"});r=o.dom.get("__");r.removeAttribute("id");p.select(r);p.collapse();return h.cancel(q)}})}return}if(!c&&l.force_p_newlines){j.onKeyPress.add(function(n,o){if(o.keyCode==13&&!o.shiftKey){if(!k.insertPara(o)){h.cancel(o)}}});if(a){j.onKeyDown.add(function(n,o){if((o.keyCode==8||o.keyCode==46)&&!o.shiftKey){k.backspaceDelete(o,o.keyCode==8)}})}}function m(o,n){var p=j.dom.create(n);g(o.attributes,function(q){if(q.specified&&q.nodeValue){p.setAttribute(q.nodeName.toLowerCase(),q.nodeValue)}});g(o.childNodes,function(q){p.appendChild(q.cloneNode(true))});o.parentNode.replaceChild(p,o);return p}j.onPreProcess.add(function(n,p){g(n.dom.select("p,h1,h2,h3,h4,h5,h6,div",p.node),function(o){if(d(o)){g(n.dom.select("span,em,strong,b,i",p.node),function(q){if(!q.hasChildNodes()){q.appendChild(n.getDoc().createTextNode("\u00a0"));return false}})}})});if(c){if(l.element!="P"){j.onKeyPress.add(function(n,o){k.lastElm=n.selection.getNode().nodeName});j.onKeyUp.add(function(p,r){var t,q=p.selection,s=q.getNode(),o=p.getBody();if(o.childNodes.length===1&&s.nodeName=="P"){s=m(s,l.element);q.select(s);q.collapse();p.nodeChanged()}else{if(r.keyCode==13&&!r.shiftKey&&k.lastElm!="P"){t=p.dom.getParent(s,"p");if(t){m(t,l.element);p.nodeChanged()}}}})}}},find:function(p,l,m){var k=this.editor,j=k.getDoc().createTreeWalker(p,4,null,false),o=-1;while(p=j.nextNode()){o++;if(l==0&&p==m){return o}if(l==1&&o==m){return p}}return -1},forceRoots:function(p,D){var u=this,p=u.editor,H=p.getBody(),E=p.getDoc(),K=p.selection,v=K.getSel(),w=K.getRng(),I=-2,o,B,j,k,F=-16777215;var G,l,J,A,x,m=H.childNodes,z,y,q;for(z=m.length-1;z>=0;z--){G=m[z];if(G.nodeType===3||(!u.dom.isBlock(G)&&G.nodeType!==8&&!/^(script|mce:script|style|mce:style)$/i.test(G.nodeName))){if(!l){if(G.nodeType!=3||/[^\s]/g.test(G.nodeValue)){if(I==-2&&w){if(!c){if(w.startContainer.nodeType==1&&(y=w.startContainer.childNodes[w.startOffset])&&y.nodeType==1){q=y.getAttribute("id");y.setAttribute("id","__mce")}else{if(p.dom.getParent(w.startContainer,function(n){return n===H})){B=w.startOffset;j=w.endOffset;I=u.find(H,0,w.startContainer);o=u.find(H,0,w.endContainer)}}}else{k=E.body.createTextRange();k.moveToElementText(H);k.collapse(1);J=k.move("character",F)*-1;k=w.duplicate();k.collapse(1);A=k.move("character",F)*-1;k=w.duplicate();k.collapse(0);x=(k.move("character",F)*-1)-A;I=A-J;o=x}}l=p.dom.create(p.settings.forced_root_block);l.appendChild(G.cloneNode(1));G.parentNode.replaceChild(l,G)}}else{if(l.hasChildNodes()){l.insertBefore(G,l.firstChild)}else{l.appendChild(G)}}}else{l=null}}if(I!=-2){if(!c){l=H.getElementsByTagName(p.settings.element)[0];w=E.createRange();if(I!=-1){w.setStart(u.find(H,1,I),B)}else{w.setStart(l,0)}if(o!=-1){w.setEnd(u.find(H,1,o),j)}else{w.setEnd(l,0)}if(v){v.removeAllRanges();v.addRange(w)}}else{try{w=v.createRange();w.moveToElementText(H);w.collapse(1);w.moveStart("character",I);w.moveEnd("character",o);w.select()}catch(C){}}}else{if(!c&&(y=p.dom.get("__mce"))){if(q){y.setAttribute("id",q)}else{y.removeAttribute("id")}w=E.createRange();w.setStartBefore(y);w.setEndBefore(y);K.setRng(w)}}},getParentBlock:function(k){var j=this.dom;return j.getParent(k,j.isBlock)},insertPara:function(N){var B=this,p=B.editor,J=p.dom,O=p.getDoc(),S=p.settings,C=p.selection.getSel(),D=C.getRangeAt(0),R=O.body;var G,H,E,L,K,m,k,o,u,j,z,Q,l,q,F,I=J.getViewPort(p.getWin()),x,A,w;G=O.createRange();G.setStart(C.anchorNode,C.anchorOffset);G.collapse(true);H=O.createRange();H.setStart(C.focusNode,C.focusOffset);H.collapse(true);E=G.compareBoundaryPoints(G.START_TO_END,H)<0;L=E?C.anchorNode:C.focusNode;K=E?C.anchorOffset:C.focusOffset;m=E?C.focusNode:C.anchorNode;k=E?C.focusOffset:C.anchorOffset;if(L===m&&/^(TD|TH)$/.test(L.nodeName)){if(L.firstChild.nodeName=="BR"){J.remove(L.firstChild)}if(L.childNodes.length==0){p.dom.add(L,S.element,null,"<br />");Q=p.dom.add(L,S.element,null,"<br />")}else{F=L.innerHTML;L.innerHTML="";p.dom.add(L,S.element,null,F);Q=p.dom.add(L,S.element,null,"<br />")}D=O.createRange();D.selectNodeContents(Q);D.collapse(1);p.selection.setRng(D);return false}if(L==R&&m==R&&R.firstChild&&p.dom.isBlock(R.firstChild)){L=m=L.firstChild;K=k=0;G=O.createRange();G.setStart(L,0);H=O.createRange();H.setStart(m,0)}L=L.nodeName=="HTML"?O.body:L;L=L.nodeName=="BODY"?L.firstChild:L;m=m.nodeName=="HTML"?O.body:m;m=m.nodeName=="BODY"?m.firstChild:m;o=B.getParentBlock(L);u=B.getParentBlock(m);j=o?o.nodeName:S.element;if(B.dom.getParent(o,"ol,ul,pre")){return true}if(o&&(o.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(J.getStyle(o,"position",1)))){j=S.element;o=null}if(u&&(u.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(J.getStyle(o,"position",1)))){j=S.element;u=null}if(/(TD|TABLE|TH|CAPTION)/.test(j)||(o&&j=="DIV"&&/left|right/gi.test(J.getStyle(o,"float",1)))){j=S.element;o=u=null}z=(o&&o.nodeName==j)?o.cloneNode(0):p.dom.create(j);Q=(u&&u.nodeName==j)?u.cloneNode(0):p.dom.create(j);Q.removeAttribute("id");if(/^(H[1-6])$/.test(j)&&e(D,o)){Q=p.dom.create(S.element)}F=l=L;do{if(F==R||F.nodeType==9||B.dom.isBlock(F)||/(TD|TABLE|TH|CAPTION)/.test(F.nodeName)){break}l=F}while((F=F.previousSibling?F.previousSibling:F.parentNode));F=q=m;do{if(F==R||F.nodeType==9||B.dom.isBlock(F)||/(TD|TABLE|TH|CAPTION)/.test(F.nodeName)){break}q=F}while((F=F.nextSibling?F.nextSibling:F.parentNode));if(l.nodeName==j){G.setStart(l,0)}else{G.setStartBefore(l)}G.setEnd(L,K);z.appendChild(G.cloneContents()||O.createTextNode(""));try{H.setEndAfter(q)}catch(M){}H.setStart(m,k);Q.appendChild(H.cloneContents()||O.createTextNode(""));D=O.createRange();if(!l.previousSibling&&l.parentNode.nodeName==j){D.setStartBefore(l.parentNode)}else{if(G.startContainer.nodeName==j&&G.startOffset==0){D.setStartBefore(G.startContainer)}else{D.setStart(G.startContainer,G.startOffset)}}if(!q.nextSibling&&q.parentNode.nodeName==j){D.setEndAfter(q.parentNode)}else{D.setEnd(H.endContainer,H.endOffset)}D.deleteContents();if(b){p.getWin().scrollTo(0,I.y)}if(z.firstChild&&z.firstChild.nodeName==j){z.innerHTML=z.firstChild.innerHTML}if(Q.firstChild&&Q.firstChild.nodeName==j){Q.innerHTML=Q.firstChild.innerHTML}if(d(z)){z.innerHTML="<br />"}function P(y,s){var r=[],U,T,t;y.innerHTML="";if(S.keep_styles){T=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(T.nodeName)){U=T.cloneNode(false);J.setAttrib(U,"id","");r.push(U)}}while(T=T.parentNode)}if(r.length>0){for(t=r.length-1,U=y;t>=0;t--){U=U.appendChild(r[t])}r[0].innerHTML=b?"&nbsp;":"<br />";return r[0]}else{y.innerHTML=b?"&nbsp;":"<br />"}}if(d(Q)){w=P(Q,m)}if(b&&parseFloat(opera.version())<9.5){D.insertNode(z);D.insertNode(Q)}else{D.insertNode(Q);D.insertNode(z)}Q.normalize();z.normalize();function v(r){return O.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false).nextNode()||r}D=O.createRange();D.selectNodeContents(a?v(w||Q):w||Q);D.collapse(1);C.removeAllRanges();C.addRange(D);x=p.dom.getPos(Q).y;A=Q.clientHeight;if(x<I.y||x+A>I.y+I.h){p.getWin().scrollTo(0,x<I.y?x:x-I.h+25)}return false},backspaceDelete:function(o,x){var z=this,m=z.editor,s=m.getBody(),l=m.dom,k,p=m.selection,j=p.getRng(),q=j.startContainer,k,u,v;if(q&&m.dom.isBlock(q)&&!/^(TD|TH)$/.test(q.nodeName)&&x){if(q.childNodes.length==0||(q.childNodes.length==1&&q.firstChild.nodeName=="BR")){k=q;while((k=k.previousSibling)&&!m.dom.isBlock(k)){}if(k){if(q!=s.firstChild){u=m.dom.doc.createTreeWalker(k,NodeFilter.SHOW_TEXT,null,false);while(v=u.nextNode()){k=v}j=m.getDoc().createRange();j.setStart(k,k.nodeValue?k.nodeValue.length:0);j.setEnd(k,k.nodeValue?k.nodeValue.length:0);p.setRng(j);m.dom.remove(q)}return h.cancel(o)}}}function y(n){var r;n=n.target;if(n&&n.parentNode&&n.nodeName=="BR"&&(k=z.getParentBlock(n))){r=n.previousSibling;h.remove(s,"DOMNodeInserted",y);if(r&&r.nodeType==3&&/\s+$/.test(r.nodeValue)){return}if(n.previousSibling||n.nextSibling){m.dom.remove(n)}}}h._add(s,"DOMNodeInserted",y);window.setTimeout(function(){h._remove(s,"DOMNodeInserted",y)},1)}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){i.execCommand(p.cmd,p.ui||false,p.value)}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;if(g.settings.use_native_selects){k=new c.ui.NativeListBox(m,i)}else{f=l||h._cls.listbox||c.ui.ListBox;k=new f(m,i)}h.controls[m]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){g.bookmark=g.selection.getBookmark(1)});a.add(o,"focus",function(){g.selection.moveToBookmark(g.bookmark);g.bookmark=null})})}if(k.hideMenu){g.onMouseDown.add(k.hideMenu,k)}return h.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){a.CommandManager=function(){var c={},b={},d={};function e(i,h,g,f){if(typeof(h)=="string"){h=[h]}a.each(h,function(j){i[j.toLowerCase()]={func:g,scope:f}})}a.extend(this,{add:function(h,g,f){e(c,h,g,f)},addQueryStateHandler:function(h,g,f){e(b,h,g,f)},addQueryValueHandler:function(h,g,f){e(d,h,g,f)},execCommand:function(g,j,i,h,f){if(j=c[j.toLowerCase()]){if(j.func.call(g||j.scope,i,h,f)!==false){return true}}},queryCommandValue:function(){if(cmd=d[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}},queryCommandState:function(){if(cmd=b[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}}})};a.GlobalCommands=new a.CommandManager()})(tinymce);(function(b){function a(i,d,h,m){var j,g,e,l,f;function k(p,o){do{if(p.parentNode==o){return p}p=p.parentNode}while(p)}function c(o){m(o);b.walk(o,m,"childNodes")}j=i.findCommonAncestor(d,h);e=k(d,j)||d;l=k(h,j)||h;for(g=d;g&&g!=e;g=g.parentNode){for(f=g.nextSibling;f;f=f.nextSibling){c(f)}}if(e!=l){for(g=e.nextSibling;g&&g!=l;g=g.nextSibling){c(g)}}else{c(e)}for(g=h;g&&g!=l;g=g.parentNode){for(f=g.previousSibling;f;f=f.previousSibling){c(f)}}}b.GlobalCommands.add("RemoveFormat",function(){var m=this,l=m.dom,u=m.selection,d=u.getRng(1),e=[],h,f,j,q,g,o,c,i;function k(s){var r;l.getParent(s,function(v){if(l.is(v,m.getParam("removeformat_selector"))){r=v}return l.isBlock(v)},m.getBody());return r}function p(r){if(l.is(r,m.getParam("removeformat_selector"))){e.push(r)}}function t(r){p(r);b.walk(r,p,"childNodes")}h=u.getBookmark();q=d.startContainer;o=d.endContainer;g=d.startOffset;c=d.endOffset;q=q.nodeType==1?q.childNodes[Math.min(g,q.childNodes.length-1)]:q;o=o.nodeType==1?o.childNodes[Math.min(g==c?c:c-1,o.childNodes.length-1)]:o;if(q==o){f=k(q);if(q.nodeType==3){if(f&&f.nodeType==1){i=q.splitText(g);i.splitText(c-g);l.split(f,i);u.moveToBookmark(h)}return}t(l.split(f,q)||q)}else{f=k(q);j=k(o);if(f){if(q.nodeType==3){if(g==q.nodeValue.length){q.nodeValue+="\uFEFF"}q=q.splitText(g)}}if(j){if(o.nodeType==3){o.splitText(c)}}if(f&&f==j){l.replace(l.create("span",{id:"__end"},o.cloneNode(true)),o)}if(f){f=l.split(f,q)}else{f=q}if(i=l.get("__end")){o=i;j=k(o)}if(j){j=l.split(j,o)}else{j=o}a(l,f,j,p);if(q.nodeValue=="\uFEFF"){q.nodeValue=""}t(o);t(q)}b.each(e,function(r){l.remove(r,1)});l.remove("__end",1);u.moveToBookmark(h)})})(tinymce);(function(a){a.GlobalCommands.add("mceBlockQuote",function(){var j=this,o=j.selection,f=j.dom,l,k,e,d,p,c,m,h,b;function g(i){return f.getParent(i,function(q){return q.nodeName==="BLOCKQUOTE"})}l=f.getParent(o.getStart(),f.isBlock);k=f.getParent(o.getEnd(),f.isBlock);if(p=g(l)){if(l!=k||l.childNodes.length>1||(l.childNodes.length==1&&l.firstChild.nodeName!="BR")){d=o.getBookmark()}if(g(k)){m=p.cloneNode(false);while(e=k.nextSibling){m.appendChild(e.parentNode.removeChild(e))}}if(m){f.insertAfter(m,p)}b=o.getSelectedBlocks(l,k);for(h=b.length-1;h>=0;h--){f.insertAfter(b[h],p)}if(/^\s*$/.test(p.innerHTML)){f.remove(p,1)}if(m&&/^\s*$/.test(m.innerHTML)){f.remove(m,1)}if(!d){if(!a.isIE){c=j.getDoc().createRange();c.setStart(l,0);c.setEnd(l,0);o.setRng(c)}else{o.select(l);o.collapse(0);if(f.getParent(o.getStart(),f.isBlock)!=l){c=o.getRng();c.move("character",-1);c.select()}}}else{j.selection.moveToBookmark(d)}return}if(a.isIE&&!l&&!k){j.getDoc().execCommand("Indent");e=g(o.getNode());e.style.margin=e.dir="";return}if(!l||!k){return}if(l!=k||l.childNodes.length>1||(l.childNodes.length==1&&l.firstChild.nodeName!="BR")){d=o.getBookmark()}a.each(o.getSelectedBlocks(g(o.getStart()),g(o.getEnd())),function(i){if(i.nodeName=="BLOCKQUOTE"&&!p){p=i;return}if(!p){p=f.create("blockquote");i.parentNode.insertBefore(p,i)}if(i.nodeName=="BLOCKQUOTE"&&p){e=i.firstChild;while(e){p.appendChild(e.cloneNode(true));e=e.nextSibling}f.remove(i);return}p.appendChild(f.remove(i))});if(!d){if(!a.isIE){c=j.getDoc().createRange();c.setStart(l,0);c.setEnd(l,0);o.setRng(c)}else{o.select(l);o.collapse(1)}}else{o.moveToBookmark(d)}})})(tinymce);(function(a){a.each(["Cut","Copy","Paste"],function(b){a.GlobalCommands.add(b,function(){var c=this,e=c.getDoc();try{e.execCommand(b,false,null);if(!e.queryCommandSupported(b)){throw"Error"}}catch(d){if(a.isGecko){c.windowManager.confirm(c.getLang("clipboard_msg"),function(f){if(f){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{c.windowManager.alert(c.getLang("clipboard_no_support"))}}})})})(tinymce);(function(a){a.GlobalCommands.add("InsertHorizontalRule",function(){if(a.isOpera){return this.getDoc().execCommand("InsertHorizontalRule",false,"")}this.selection.setContent("<hr />")})})(tinymce);(function(){var a=tinymce.GlobalCommands;a.add(["mceEndUndoLevel","mceAddUndoLevel"],function(){this.undoManager.add()});a.add("Undo",function(){var b=this;if(b.settings.custom_undo_redo){b.undoManager.undo();b.nodeChanged();return true}return false});a.add("Redo",function(){var b=this;if(b.settings.custom_undo_redo){b.undoManager.redo();b.nodeChanged();return true}return false})})(); \ No newline at end of file
diff --git a/public/javascripts/tiny_mce/tiny_mce_popup.js b/public/javascripts/tiny_mce/tiny_mce_popup.js
index 6475f39..c9bf1fe 100755..100644
--- a/public/javascripts/tiny_mce/tiny_mce_popup.js
+++ b/public/javascripts/tiny_mce/tiny_mce_popup.js
@@ -1,294 +1,5 @@
1// Some global instances 1
2var tinymce = null, tinyMCEPopup, tinyMCE; 2// Uncomment and change this document.domain value if you are loading the script cross subdomains
3 3// document.domain = 'moxiecode.com';
4tinyMCEPopup = { 4
5 init : function() { 5var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var e=this,g,a=document.body,c=e.dom.getViewPort(window),d,f;d=e.getWindowArg("mce_width")-c.w;f=e.getWindowArg("mce_height")-c.h;if(e.isWindow){window.resizeBy(d,f)}else{e.editor.windowManager.resizeBy(d,f,e.id)}},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait(); \ No newline at end of file
6 var t = this, w, ti, li, q, i, it;
7
8 li = ('' + document.location.search).replace(/^\?/, '').split('&');
9 q = {};
10 for (i=0; i<li.length; i++) {
11 it = li[i].split('=');
12 q[unescape(it[0])] = unescape(it[1]);
13 }
14
15 if (q.mce_rdomain)
16 document.domain = q.mce_rdomain;
17
18 // Find window & API
19 w = t.getWin();
20 tinymce = w.tinymce;
21 tinyMCE = w.tinyMCE;
22 t.editor = tinymce.EditorManager.activeEditor;
23 t.params = t.editor.windowManager.params;
24 t.features = t.editor.windowManager.features;
25
26 // Setup local DOM
27 t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);
28
29 // Enables you to skip loading the default css
30 if (t.features.popup_css !== false)
31 t.dom.loadCSS(t.features.popup_css || t.editor.settings.popup_css);
32
33 // Setup on init listeners
34 t.listeners = [];
35 t.onInit = {
36 add : function(f, s) {
37 t.listeners.push({func : f, scope : s});
38 }
39 };
40
41 t.isWindow = !t.getWindowArg('mce_inline');
42 t.id = t.getWindowArg('mce_window_id');
43 t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);
44 },
45
46 getWin : function() {
47 return window.dialogArguments || opener || parent || top;
48 },
49
50 getWindowArg : function(n, dv) {
51 var v = this.params[n];
52
53 return tinymce.is(v) ? v : dv;
54 },
55
56 getParam : function(n, dv) {
57 return this.editor.getParam(n, dv);
58 },
59
60 getLang : function(n, dv) {
61 return this.editor.getLang(n, dv);
62 },
63
64 execCommand : function(cmd, ui, val, a) {
65 a = a || {};
66 a.skip_focus = 1;
67
68 this.restoreSelection();
69 return this.editor.execCommand(cmd, ui, val, a);
70 },
71
72 resizeToInnerSize : function() {
73 var t = this, n, b = document.body, vp = t.dom.getViewPort(window), dw, dh;
74
75 dw = t.getWindowArg('mce_width') - vp.w;
76 dh = t.getWindowArg('mce_height') - vp.h;
77
78 if (t.isWindow)
79 window.resizeBy(dw, dh);
80 else
81 t.editor.windowManager.resizeBy(dw, dh, t.id);
82 },
83
84 executeOnLoad : function(s) {
85 this.onInit.add(function() {
86 eval(s);
87 });
88 },
89
90 storeSelection : function() {
91 this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');
92 },
93
94 restoreSelection : function() {
95 var t = tinyMCEPopup;
96
97 if (!t.isWindow && tinymce.isIE)
98 t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);
99 },
100
101 requireLangPack : function() {
102 var u = this.getWindowArg('plugin_url') || this.getWindowArg('theme_url');
103
104 if (u && this.editor.settings.language) {
105 u += '/langs/' + this.editor.settings.language + '_dlg.js';
106
107 if (!tinymce.ScriptLoader.isDone(u)) {
108 document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>');
109 tinymce.ScriptLoader.markDone(u);
110 }
111 }
112 },
113
114 pickColor : function(e, element_id) {
115 this.execCommand('mceColorPicker', true, {
116 color : document.getElementById(element_id).value,
117 func : function(c) {
118 document.getElementById(element_id).value = c;
119
120 try {
121 document.getElementById(element_id).onchange();
122 } catch (ex) {
123 // Try fire event, ignore errors
124 }
125 }
126 });
127 },
128
129 openBrowser : function(element_id, type, option) {
130 tinyMCEPopup.restoreSelection();
131 this.editor.execCallback('file_browser_callback', element_id, document.getElementById(element_id).value, type, window);
132 },
133
134 confirm : function(t, cb, s) {
135 this.editor.windowManager.confirm(t, cb, s, window);
136 },
137
138 alert : function(tx, cb, s) {
139 this.editor.windowManager.alert(tx, cb, s, window);
140 },
141
142 close : function() {
143 var t = this;
144
145 // To avoid domain relaxing issue in Opera
146 function close() {
147 t.editor.windowManager.close(window);
148 tinymce = tinyMCE = t.editor = t.params = t.dom = t.dom.doc = null; // Cleanup
149 };
150
151 if (tinymce.isOpera)
152 t.getWin().setTimeout(close, 0);
153 else
154 close();
155 },
156
157 // Internal functions
158
159 _restoreSelection : function() {
160 var e = window.event.srcElement;
161
162 if (e.nodeName == 'INPUT' && (e.type == 'submit' || e.type == 'button'))
163 tinyMCEPopup.restoreSelection();
164 },
165
166/* _restoreSelection : function() {
167 var e = window.event.srcElement;
168
169 // If user focus a non text input or textarea
170 if ((e.nodeName != 'INPUT' && e.nodeName != 'TEXTAREA') || e.type != 'text')
171 tinyMCEPopup.restoreSelection();
172 },*/
173
174 _onDOMLoaded : function() {
175 var t = this, ti = document.title, bm, h, nv;
176
177 // Translate page
178 if (t.features.translate_i18n !== false) {
179 h = document.body.innerHTML;
180
181 // Replace a=x with a="x" in IE
182 if (tinymce.isIE)
183 h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')
184
185 document.dir = t.editor.getParam('directionality','');
186
187 if ((nv = t.editor.translate(h)) && nv != h)
188 document.body.innerHTML = nv;
189
190 if ((nv = t.editor.translate(ti)) && nv != ti)
191 document.title = ti = nv;
192 }
193
194 document.body.style.display = '';
195
196 // Restore selection in IE when focus is placed on a non textarea or input element of the type text
197 if (tinymce.isIE)
198 document.attachEvent('onmouseup', tinyMCEPopup._restoreSelection);
199
200 t.restoreSelection();
201 t.resizeToInnerSize();
202
203 // Set inline title
204 if (!t.isWindow)
205 t.editor.windowManager.setTitle(window, ti);
206 else
207 window.focus();
208
209 if (!tinymce.isIE && !t.isWindow) {
210 tinymce.dom.Event._add(document, 'focus', function() {
211 t.editor.windowManager.focus(t.id)
212 });
213 }
214
215 // Patch for accessibility
216 tinymce.each(t.dom.select('select'), function(e) {
217 e.onkeydown = tinyMCEPopup._accessHandler;
218 });
219
220 // Call onInit
221 // Init must be called before focus so the selection won't get lost by the focus call
222 tinymce.each(t.listeners, function(o) {
223 o.func.call(o.scope, t.editor);
224 });
225
226 // Move focus to window
227 if (t.getWindowArg('mce_auto_focus', true)) {
228 window.focus();
229
230 // Focus element with mceFocus class
231 tinymce.each(document.forms, function(f) {
232 tinymce.each(f.elements, function(e) {
233 if (t.dom.hasClass(e, 'mceFocus') && !e.disabled) {
234 e.focus();
235 return false; // Break loop
236 }
237 });
238 });
239 }
240
241 document.onkeyup = tinyMCEPopup._closeWinKeyHandler;
242 },
243
244 _accessHandler : function(e) {
245 e = e || window.event;
246
247 if (e.keyCode == 13 || e.keyCode == 32) {
248 e = e.target || e.srcElement;
249
250 if (e.onchange)
251 e.onchange();
252
253 return tinymce.dom.Event.cancel(e);
254 }
255 },
256
257 _closeWinKeyHandler : function(e) {
258 e = e || window.event;
259
260 if (e.keyCode == 27)
261 tinyMCEPopup.close();
262 },
263
264 _wait : function() {
265 var t = this, ti;
266
267 if (tinymce.isIE && document.location.protocol != 'https:') {
268 // Fake DOMContentLoaded on IE
269 document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');
270 document.getElementById("__ie_onload").onreadystatechange = function() {
271 if (this.readyState == "complete") {
272 t._onDOMLoaded();
273 document.getElementById("__ie_onload").onreadystatechange = null; // Prevent leak
274 }
275 };
276 } else {
277 if (tinymce.isIE || tinymce.isWebKit) {
278 ti = setInterval(function() {
279 if (/loaded|complete/.test(document.readyState)) {
280 clearInterval(ti);
281 t._onDOMLoaded();
282 }
283 }, 10);
284 } else {
285 window.addEventListener('DOMContentLoaded', function() {
286 t._onDOMLoaded();
287 }, false);
288 }
289 }
290 }
291};
292
293tinyMCEPopup.init();
294tinyMCEPopup._wait(); // Wait for DOM Content Loaded
diff --git a/public/javascripts/tiny_mce/tiny_mce_src.js b/public/javascripts/tiny_mce/tiny_mce_src.js
index f54ed61..aa402d5 100755..100644
--- a/public/javascripts/tiny_mce/tiny_mce_src.js
+++ b/public/javascripts/tiny_mce/tiny_mce_src.js
@@ -1,11098 +1,12332 @@
1 1var tinymce = {
2/* file:jscripts/tiny_mce/classes/tinymce.js */ 2 majorVersion : '3',
3 3 minorVersion : '2.6',
4var tinymce = { 4 releaseDate : '2009-08-19',
5 majorVersion : '3', 5
6 minorVersion : '2.1.1', 6 _init : function() {
7 releaseDate : '2008-11-27', 7 var t = this, d = document, w = window, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;
8 8
9 _init : function() { 9 t.isOpera = w.opera && opera.buildNumber;
10 var t = this, d = document, w = window, na = navigator, ua = na.userAgent, i, nl, n, base, p, v; 10
11 11 t.isWebKit = /WebKit/.test(ua);
12 // Browser checks 12
13 t.isOpera = w.opera && opera.buildNumber; 13 t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);
14 t.isWebKit = /WebKit/.test(ua); 14
15 t.isOldWebKit = t.isWebKit && !w.getSelection().getRangeAt; 15 t.isIE6 = t.isIE && /MSIE [56]/.test(ua);
16 t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName); 16
17 t.isIE6 = t.isIE && /MSIE [56]/.test(ua); 17 t.isGecko = !t.isWebKit && /Gecko/.test(ua);
18 t.isGecko = !t.isWebKit && /Gecko/.test(ua); 18
19 t.isMac = ua.indexOf('Mac') != -1; 19 t.isMac = ua.indexOf('Mac') != -1;
20 t.isAir = /adobeair/i.test(ua); 20
21 21 t.isAir = /adobeair/i.test(ua);
22 // TinyMCE .NET webcontrol might be setting the values for TinyMCE 22
23 if (w.tinyMCEPreInit) { 23 // TinyMCE .NET webcontrol might be setting the values for TinyMCE
24 t.suffix = tinyMCEPreInit.suffix; 24 if (w.tinyMCEPreInit) {
25 t.baseURL = tinyMCEPreInit.base; 25 t.suffix = tinyMCEPreInit.suffix;
26 t.query = tinyMCEPreInit.query; 26 t.baseURL = tinyMCEPreInit.base;
27 return; 27 t.query = tinyMCEPreInit.query;
28 } 28 return;
29 29 }
30 // Get suffix and base 30
31 t.suffix = ''; 31 // Get suffix and base
32 32 t.suffix = '';
33 // If base element found, add that infront of baseURL 33
34 nl = d.getElementsByTagName('base'); 34 // If base element found, add that infront of baseURL
35 for (i=0; i<nl.length; i++) { 35 nl = d.getElementsByTagName('base');
36 if (v = nl[i].href) { 36 for (i=0; i<nl.length; i++) {
37 // Host only value like http://site.com or http://site.com:8008 37 if (v = nl[i].href) {
38 if (/^https?:\/\/[^\/]+$/.test(v)) 38 // Host only value like http://site.com or http://site.com:8008
39 v += '/'; 39 if (/^https?:\/\/[^\/]+$/.test(v))
40 40 v += '/';
41 base = v ? v.match(/.*\//)[0] : ''; // Get only directory 41
42 } 42 base = v ? v.match(/.*\//)[0] : ''; // Get only directory
43 } 43 }
44 44 }
45 function getBase(n) { 45
46 if (n.src && /tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)) { 46 function getBase(n) {
47 if (/_(src|dev)\.js/g.test(n.src)) 47 if (n.src && /tiny_mce(|_gzip|_jquery|_prototype)(_dev|_src)?.js/.test(n.src)) {
48 t.suffix = '_src'; 48 if (/_(src|dev)\.js/g.test(n.src))
49 49 t.suffix = '_src';
50 if ((p = n.src.indexOf('?')) != -1) 50
51 t.query = n.src.substring(p + 1); 51 if ((p = n.src.indexOf('?')) != -1)
52 52 t.query = n.src.substring(p + 1);
53 t.baseURL = n.src.substring(0, n.src.lastIndexOf('/')); 53
54 54 t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));
55 // If path to script is relative and a base href was found add that one infront 55
56 if (base && t.baseURL.indexOf('://') == -1) 56 // If path to script is relative and a base href was found add that one infront
57 t.baseURL = base + t.baseURL; 57 // the src property will always be an absolute one on non IE browsers and IE 8
58 58 // so this logic will basically only be executed on older IE versions
59 return t.baseURL; 59 if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)
60 } 60 t.baseURL = base + t.baseURL;
61 61
62 return null; 62 return t.baseURL;
63 }; 63 }
64 64
65 // Check document 65 return null;
66 nl = d.getElementsByTagName('script'); 66 };
67 for (i=0; i<nl.length; i++) { 67
68 if (getBase(nl[i])) 68 // Check document
69 return; 69 nl = d.getElementsByTagName('script');
70 } 70 for (i=0; i<nl.length; i++) {
71 71 if (getBase(nl[i]))
72 // Check head 72 return;
73 n = d.getElementsByTagName('head')[0]; 73 }
74 if (n) { 74
75 nl = n.getElementsByTagName('script'); 75 // Check head
76 for (i=0; i<nl.length; i++) { 76 n = d.getElementsByTagName('head')[0];
77 if (getBase(nl[i])) 77 if (n) {
78 return; 78 nl = n.getElementsByTagName('script');
79 } 79 for (i=0; i<nl.length; i++) {
80 } 80 if (getBase(nl[i]))
81 81 return;
82 return; 82 }
83 }, 83 }
84 84
85 is : function(o, t) { 85 return;
86 var n = typeof(o); 86 },
87 87
88 if (!t) 88 is : function(o, t) {
89 return n != 'undefined'; 89 var n = typeof(o);
90 90
91 if (t == 'array' && (o instanceof Array)) 91 if (!t)
92 return true; 92 return n != 'undefined';
93 93
94 return n == t; 94 if (t == 'array' && (o.hasOwnProperty && o instanceof Array))
95 }, 95 return true;
96 96
97 // #if !jquery 97 return n == t;
98 98 },
99 each : function(o, cb, s) { 99
100 var n, l; 100 each : function(o, cb, s) {
101 101 var n, l;
102 if (!o) 102
103 return 0; 103 if (!o)
104 104 return 0;
105 s = s || o; 105
106 106 s = s || o;
107 if (typeof(o.length) != 'undefined') { 107
108 // Indexed arrays, needed for Safari 108 if (typeof(o.length) != 'undefined') {
109 for (n=0, l = o.length; n<l; n++) { 109 // Indexed arrays, needed for Safari
110 if (cb.call(s, o[n], n, o) === false) 110 for (n=0, l = o.length; n<l; n++) {
111 return 0; 111 if (cb.call(s, o[n], n, o) === false)
112 } 112 return 0;
113 } else { 113 }
114 // Hashtables 114 } else {
115 for (n in o) { 115 // Hashtables
116 if (o.hasOwnProperty(n)) { 116 for (n in o) {
117 if (cb.call(s, o[n], n, o) === false) 117 if (o.hasOwnProperty(n)) {
118 return 0; 118 if (cb.call(s, o[n], n, o) === false)
119 } 119 return 0;
120 } 120 }
121 } 121 }
122 122 }
123 return 1; 123
124 }, 124 return 1;
125 125 },
126 map : function(a, f) { 126
127 var o = []; 127
128 128 trim : function(s) {
129 tinymce.each(a, function(v) { 129 return (s ? '' + s : '').replace(/^\s*|\s*$/g, '');
130 o.push(f(v)); 130 },
131 }); 131
132 132 create : function(s, p) {
133 return o; 133 var t = this, sp, ns, cn, scn, c, de = 0;
134 }, 134
135 135 // Parse : <prefix> <class>:<super class>
136 grep : function(a, f) { 136 s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);
137 var o = []; 137 cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name
138 138
139 tinymce.each(a, function(v) { 139 // Create namespace for new class
140 if (!f || f(v)) 140 ns = t.createNS(s[3].replace(/\.\w+$/, ''));
141 o.push(v); 141
142 }); 142 // Class already exists
143 143 if (ns[cn])
144 return o; 144 return;
145 }, 145
146 146 // Make pure static class
147 inArray : function(a, v) { 147 if (s[2] == 'static') {
148 var i, l; 148 ns[cn] = p;
149 149
150 if (a) { 150 if (this.onCreate)
151 for (i = 0, l = a.length; i < l; i++) { 151 this.onCreate(s[2], s[3], ns[cn]);
152 if (a[i] === v) 152
153 return i; 153 return;
154 } 154 }
155 } 155
156 156 // Create default constructor
157 return -1; 157 if (!p[cn]) {
158 }, 158 p[cn] = function() {};
159 159 de = 1;
160 extend : function(o, e) { 160 }
161 var i, a = arguments; 161
162 162 // Add constructor and methods
163 for (i=1; i<a.length; i++) { 163 ns[cn] = p[cn];
164 e = a[i]; 164 t.extend(ns[cn].prototype, p);
165 165
166 tinymce.each(e, function(v, n) { 166 // Extend
167 if (typeof(v) !== 'undefined') 167 if (s[5]) {
168 o[n] = v; 168 sp = t.resolve(s[5]).prototype;
169 }); 169 scn = s[5].match(/\.(\w+)$/i)[1]; // Class name
170 } 170
171 171 // Extend constructor
172 return o; 172 c = ns[cn];
173 }, 173 if (de) {
174 174 // Add passthrough constructor
175 trim : function(s) { 175 ns[cn] = function() {
176 return (s ? '' + s : '').replace(/^\s*|\s*$/g, ''); 176 return sp[scn].apply(this, arguments);
177 }, 177 };
178 178 } else {
179 // #endif 179 // Add inherit constructor
180 180 ns[cn] = function() {
181 create : function(s, p) { 181 this.parent = sp[scn];
182 var t = this, sp, ns, cn, scn, c, de = 0; 182 return c.apply(this, arguments);
183 183 };
184 // Parse : <prefix> <class>:<super class> 184 }
185 s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s); 185 ns[cn].prototype[cn] = ns[cn];
186 cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name 186
187 187 // Add super methods
188 // Create namespace for new class 188 t.each(sp, function(f, n) {
189 ns = t.createNS(s[3].replace(/\.\w+$/, '')); 189 ns[cn].prototype[n] = sp[n];
190 190 });
191 // Class already exists 191
192 if (ns[cn]) 192 // Add overridden methods
193 return; 193 t.each(p, function(f, n) {
194 194 // Extend methods if needed
195 // Make pure static class 195 if (sp[n]) {
196 if (s[2] == 'static') { 196 ns[cn].prototype[n] = function() {
197 ns[cn] = p; 197 this.parent = sp[n];
198 198 return f.apply(this, arguments);
199 if (this.onCreate) 199 };
200 this.onCreate(s[2], s[3], ns[cn]); 200 } else {
201 201 if (n != cn)
202 return; 202 ns[cn].prototype[n] = f;
203 } 203 }
204 204 });
205 // Create default constructor 205 }
206 if (!p[cn]) { 206
207 p[cn] = function() {}; 207 // Add static methods
208 de = 1; 208 t.each(p['static'], function(f, n) {
209 } 209 ns[cn][n] = f;
210 210 });
211 // Add constructor and methods 211
212 ns[cn] = p[cn]; 212 if (this.onCreate)
213 t.extend(ns[cn].prototype, p); 213 this.onCreate(s[2], s[3], ns[cn].prototype);
214 214 },
215 // Extend 215
216 if (s[5]) { 216 walk : function(o, f, n, s) {
217 sp = t.resolve(s[5]).prototype; 217 s = s || this;
218 scn = s[5].match(/\.(\w+)$/i)[1]; // Class name 218
219 219 if (o) {
220 // Extend constructor 220 if (n)
221 c = ns[cn]; 221 o = o[n];
222 if (de) { 222
223 // Add passthrough constructor 223 tinymce.each(o, function(o, i) {
224 ns[cn] = function() { 224 if (f.call(s, o, i, n) === false)
225 return sp[scn].apply(this, arguments); 225 return false;
226 }; 226
227 } else { 227 tinymce.walk(o, f, n, s);
228 // Add inherit constructor 228 });
229 ns[cn] = function() { 229 }
230 this.parent = sp[scn]; 230 },
231 return c.apply(this, arguments); 231
232 }; 232 createNS : function(n, o) {
233 } 233 var i, v;
234 ns[cn].prototype[cn] = ns[cn]; 234
235 235 o = o || window;
236 // Add super methods 236
237 t.each(sp, function(f, n) { 237 n = n.split('.');
238 ns[cn].prototype[n] = sp[n]; 238 for (i=0; i<n.length; i++) {
239 }); 239 v = n[i];
240 240
241 // Add overridden methods 241 if (!o[v])
242 t.each(p, function(f, n) { 242 o[v] = {};
243 // Extend methods if needed 243
244 if (sp[n]) { 244 o = o[v];
245 ns[cn].prototype[n] = function() { 245 }
246 this.parent = sp[n]; 246
247 return f.apply(this, arguments); 247 return o;
248 }; 248 },
249 } else { 249
250 if (n != cn) 250 resolve : function(n, o) {
251 ns[cn].prototype[n] = f; 251 var i, l;
252 } 252
253 }); 253 o = o || window;
254 } 254
255 255 n = n.split('.');
256 // Add static methods 256 for (i = 0, l = n.length; i < l; i++) {
257 t.each(p['static'], function(f, n) { 257 o = o[n[i]];
258 ns[cn][n] = f; 258
259 }); 259 if (!o)
260 260 break;
261 if (this.onCreate) 261 }
262 this.onCreate(s[2], s[3], ns[cn].prototype); 262
263 }, 263 return o;
264 264 },
265 walk : function(o, f, n, s) { 265
266 s = s || this; 266 addUnload : function(f, s) {
267 267 var t = this, w = window;
268 if (o) { 268
269 if (n) 269 f = {func : f, scope : s || this};
270 o = o[n]; 270
271 271 if (!t.unloads) {
272 tinymce.each(o, function(o, i) { 272 function unload() {
273 if (f.call(s, o, i, n) === false) 273 var li = t.unloads, o, n;
274 return false; 274
275 275 if (li) {
276 tinymce.walk(o, f, n, s); 276 // Call unload handlers
277 }); 277 for (n in li) {
278 } 278 o = li[n];
279 }, 279
280 280 if (o && o.func)
281 createNS : function(n, o) { 281 o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy
282 var i, v; 282 }
283 283
284 o = o || window; 284 // Detach unload function
285 285 if (w.detachEvent) {
286 n = n.split('.'); 286 w.detachEvent('onbeforeunload', fakeUnload);
287 for (i=0; i<n.length; i++) { 287 w.detachEvent('onunload', unload);
288 v = n[i]; 288 } else if (w.removeEventListener)
289 289 w.removeEventListener('unload', unload, false);
290 if (!o[v]) 290
291 o[v] = {}; 291 // Destroy references
292 292 t.unloads = o = li = w = unload = 0;
293 o = o[v]; 293
294 } 294 // Run garbarge collector on IE
295 295 if (window.CollectGarbage)
296 return o; 296 window.CollectGarbage();
297 }, 297 }
298 298 };
299 resolve : function(n, o) { 299
300 var i, l; 300 function fakeUnload() {
301 301 var d = document;
302 o = o || window; 302
303 303 // Is there things still loading, then do some magic
304 n = n.split('.'); 304 if (d.readyState == 'interactive') {
305 for (i=0, l = n.length; i<l; i++) { 305 function stop() {
306 o = o[n[i]]; 306 // Prevent memory leak
307 307 d.detachEvent('onstop', stop);
308 if (!o) 308
309 break; 309 // Call unload handler
310 } 310 if (unload)
311 311 unload();
312 return o; 312
313 }, 313 d = 0;
314 314 };
315 addUnload : function(f, s) { 315
316 var t = this, w = window; 316 // Fire unload when the currently loading page is stopped
317 317 if (d)
318 f = {func : f, scope : s || this}; 318 d.attachEvent('onstop', stop);
319 319
320 if (!t.unloads) { 320 // Remove onstop listener after a while to prevent the unload function
321 function unload() { 321 // to execute if the user presses cancel in an onbeforeunload
322 var li = t.unloads, o, n; 322 // confirm dialog and then presses the browser stop button
323 323 window.setTimeout(function() {
324 if (li) { 324 if (d)
325 // Call unload handlers 325 d.detachEvent('onstop', stop);
326 for (n in li) { 326 }, 0);
327 o = li[n]; 327 }
328 328 };
329 if (o && o.func) 329
330 o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy 330 // Attach unload handler
331 } 331 if (w.attachEvent) {
332 332 w.attachEvent('onunload', unload);
333 // Detach unload function 333 w.attachEvent('onbeforeunload', fakeUnload);
334 if (w.detachEvent) { 334 } else if (w.addEventListener)
335 w.detachEvent('onbeforeunload', fakeUnload); 335 w.addEventListener('unload', unload, false);
336 w.detachEvent('onunload', unload); 336
337 } else if (w.removeEventListener) 337 // Setup initial unload handler array
338 w.removeEventListener('unload', unload, false); 338 t.unloads = [f];
339 339 } else
340 // Destroy references 340 t.unloads.push(f);
341 t.unloads = o = li = w = unload = null; 341
342 342 return f;
343 // Run garbarge collector on IE 343 },
344 if (window.CollectGarbage) 344
345 window.CollectGarbage(); 345 removeUnload : function(f) {
346 } 346 var u = this.unloads, r = null;
347 }; 347
348 348 tinymce.each(u, function(o, i) {
349 function fakeUnload() { 349 if (o && o.func == f) {
350 var d = document; 350 u.splice(i, 1);
351 351 r = f;
352 // Is there things still loading, then do some magic 352 return false;
353 if (d.readyState == 'interactive') { 353 }
354 function stop() { 354 });
355 // Prevent memory leak 355
356 d.detachEvent('onstop', stop); 356 return r;
357 357 },
358 // Call unload handler 358
359 unload(); 359 explode : function(s, d) {
360 360 return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;
361 d = null; 361 },
362 }; 362
363 363 _addVer : function(u) {
364 // Fire unload when the currently loading page is stopped 364 var v;
365 d.attachEvent('onstop', stop); 365
366 366 if (!this.query)
367 // Remove onstop listener after a while to prevent the unload function 367 return u;
368 // to execute if the user presses cancel in an onbeforeunload 368
369 // confirm dialog and then presses the browser stop button 369 v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;
370 window.setTimeout(function() { 370
371 d.detachEvent('onstop', stop); 371 if (u.indexOf('#') == -1)
372 }, 0); 372 return u + v;
373 } 373
374 }; 374 return u.replace('#', v + '#');
375 375 }
376 // Attach unload handler 376
377 if (w.attachEvent) { 377 };
378 w.attachEvent('onunload', unload); 378
379 w.attachEvent('onbeforeunload', fakeUnload); 379// Required for GZip AJAX loading
380 } else if (w.addEventListener) 380window.tinymce = tinymce;
381 w.addEventListener('unload', unload, false); 381
382 382// Initialize the API
383 // Setup initial unload handler array 383tinymce._init();
384 t.unloads = [f]; 384
385 } else 385(function($, tinymce) {
386 t.unloads.push(f); 386 var is = tinymce.is;
387 387
388 return f; 388 if (!window.jQuery)
389 }, 389 return alert("Load jQuery first!");
390 390
391 removeUnload : function(f) { 391 // Patch in core NS functions
392 var u = this.unloads, r = null; 392 tinymce.extend = $.extend;
393 393 tinymce.extend(tinymce, {
394 tinymce.each(u, function(o, i) { 394 map : $.map,
395 if (o && o.func == f) { 395 grep : function(a, f) {return $.grep(a, f || function(){return 1;});},
396 u.splice(i, 1); 396 inArray : function(a, v) {return $.inArray(v, a || []);}
397 r = f; 397
398 return false; 398 /* Didn't iterate stylesheets
399 } 399 each : function(o, cb, s) {
400 }); 400 if (!o)
401 401 return 0;
402 return r; 402
403 }, 403 var r = 1;
404 404
405 explode : function(s, d) { 405 $.each(o, function(nr, el){
406 return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s; 406 if (cb.call(s, el, nr, o) === false) {
407 }, 407 r = 0;
408 408 return false;
409 _addVer : function(u) { 409 }
410 var v; 410 });
411 411
412 if (!this.query) 412 return r;
413 return u; 413 }*/
414 414 });
415 v = (u.indexOf('?') == -1 ? '?' : '&') + this.query; 415
416 416 // Patch in functions in various clases
417 if (u.indexOf('#') == -1) 417 // Add a "#ifndefjquery" statement around each core API function you add below
418 return u + v; 418 var patches = {
419 419 'tinymce.dom.DOMUtils' : {
420 return u.replace('#', v + '#'); 420 /*
421 } 421 addClass : function(e, c) {
422 422 if (is(e, 'array') && is(e[0], 'string'))
423 }; 423 e = e.join(',#');
424 424 return (e && $(is(e, 'string') ? '#' + e : e)
425// Required for GZip AJAX loading 425 .addClass(c)
426window.tinymce = tinymce; 426 .attr('class')) || false;
427 427 },
428// Initialize the API 428
429tinymce._init(); 429 hasClass : function(n, c) {
430 430 return $(is(n, 'string') ? '#' + n : n).hasClass(c);
431/* file:jscripts/tiny_mce/classes/adapter/jquery/adapter.js */ 431 },
432 432
433 433 removeClass : function(e, c) {
434/* file:jscripts/tiny_mce/classes/adapter/prototype/adapter.js */ 434 if (!e)
435 435 return false;
436 436
437/* file:jscripts/tiny_mce/classes/util/Dispatcher.js */ 437 var r = [];
438 438
439tinymce.create('tinymce.util.Dispatcher', { 439 $(is(e, 'string') ? '#' + e : e)
440 scope : null, 440 .removeClass(c)
441 listeners : null, 441 .each(function(){
442 442 r.push(this.className);
443 Dispatcher : function(s) { 443 });
444 this.scope = s || this; 444
445 this.listeners = []; 445 return r.length == 1 ? r[0] : r;
446 }, 446 },
447 447 */
448 add : function(cb, s) { 448
449 this.listeners.push({cb : cb, scope : s || this.scope}); 449 select : function(pattern, scope) {
450 450 var t = this;
451 return cb; 451
452 }, 452 return $.find(pattern, t.get(scope) || t.get(t.settings.root_element) || t.doc, []);
453 453 },
454 addToTop : function(cb, s) { 454
455 this.listeners.unshift({cb : cb, scope : s || this.scope}); 455 is : function(n, patt) {
456 456 return $(this.get(n)).is(patt);
457 return cb; 457 }
458 }, 458
459 459 /*
460 remove : function(cb) { 460 show : function(e) {
461 var l = this.listeners, o = null; 461 if (is(e, 'array') && is(e[0], 'string'))
462 462 e = e.join(',#');
463 tinymce.each(l, function(c, i) { 463
464 if (cb == c.cb) { 464 $(is(e, 'string') ? '#' + e : e).css('display', 'block');
465 o = cb; 465 },
466 l.splice(i, 1); 466
467 return false; 467 hide : function(e) {
468 } 468 if (is(e, 'array') && is(e[0], 'string'))
469 }); 469 e = e.join(',#');
470 470
471 return o; 471 $(is(e, 'string') ? '#' + e : e).css('display', 'none');
472 }, 472 },
473 473
474 dispatch : function() { 474 isHidden : function(e) {
475 var s, a = arguments, i, li = this.listeners, c; 475 return $(is(e, 'string') ? '#' + e : e).is(':hidden');
476 476 },
477 // Needs to be a real loop since the listener count might change while looping 477
478 // And this is also more efficient 478 insertAfter : function(n, e) {
479 for (i = 0; i<li.length; i++) { 479 return $(is(e, 'string') ? '#' + e : e).after(n);
480 c = li[i]; 480 },
481 s = c.cb.apply(c.scope, a); 481
482 482 replace : function(o, n, k) {
483 if (s === false) 483 n = $(is(n, 'string') ? '#' + n : n);
484 break; 484
485 } 485 if (k)
486 486 n.children().appendTo(o);
487 return s; 487
488 } 488 n.replaceWith(o);
489 489 },
490 }); 490
491 491 setStyle : function(n, na, v) {
492/* file:jscripts/tiny_mce/classes/util/URI.js */ 492 if (is(n, 'array') && is(n[0], 'string'))
493 493 n = n.join(',#');
494(function() { 494
495 var each = tinymce.each; 495 $(is(n, 'string') ? '#' + n : n).css(na, v);
496 496 },
497 tinymce.create('tinymce.util.URI', { 497
498 URI : function(u, s) { 498 getStyle : function(n, na, c) {
499 var t = this, o, a, b; 499 return $(is(n, 'string') ? '#' + n : n).css(na);
500 500 },
501 // Default settings 501
502 s = t.settings = s || {}; 502 setStyles : function(e, o) {
503 503 if (is(e, 'array') && is(e[0], 'string'))
504 // Strange app protocol or local anchor 504 e = e.join(',#');
505 if (/^(mailto|news|javascript|about):/i.test(u) || /^\s*#/.test(u)) { 505 $(is(e, 'string') ? '#' + e : e).css(o);
506 t.source = u; 506 },
507 return; 507
508 } 508 setAttrib : function(e, n, v) {
509 509 var t = this, s = t.settings;
510 // Absolute path with no host, fake host and protocol 510
511 if (u.indexOf('/') === 0 && u.indexOf('//') !== 0) 511 if (is(e, 'array') && is(e[0], 'string'))
512 u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u; 512 e = e.join(',#');
513 513
514 // Relative path 514 e = $(is(e, 'string') ? '#' + e : e);
515 if (u.indexOf(':/') === -1 && u.indexOf('//') !== 0) 515
516 u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u); 516 switch (n) {
517 517 case "style":
518 // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri) 518 e.each(function(i, v){
519 u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something 519 if (s.keep_values)
520 u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u); 520 $(v).attr('mce_style', v);
521 each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) { 521
522 var s = u[i]; 522 v.style.cssText = v;
523 523 });
524 // Zope 3 workaround, they use @@something 524 break;
525 if (s) 525
526 s = s.replace(/\(mce_at\)/g, '@@'); 526 case "class":
527 527 e.each(function(){
528 t[v] = s; 528 this.className = v;
529 }); 529 });
530 530 break;
531 if (b = s.base_uri) { 531
532 if (!t.protocol) 532 case "src":
533 t.protocol = b.protocol; 533 case "href":
534 534 e.each(function(i, v){
535 if (!t.userInfo) 535 if (s.keep_values) {
536 t.userInfo = b.userInfo; 536 if (s.url_converter)
537 537 v = s.url_converter.call(s.url_converter_scope || t, v, n, v);
538 if (!t.port && t.host == 'mce_host') 538
539 t.port = b.port; 539 t.setAttrib(v, 'mce_' + n, v);
540 540 }
541 if (!t.host || t.host == 'mce_host') 541 });
542 t.host = b.host; 542
543 543 break;
544 t.source = ''; 544 }
545 } 545
546 546 if (v !== null && v.length !== 0)
547 //t.path = t.path || '/'; 547 e.attr(n, '' + v);
548 }, 548 else
549 549 e.removeAttr(n);
550 setPath : function(p) { 550 },
551 var t = this; 551
552 552 setAttribs : function(e, o) {
553 p = /^(.*?)\/?(\w+)?$/.exec(p); 553 var t = this;
554 554
555 // Update path parts 555 $.each(o, function(n, v){
556 t.path = p[0]; 556 t.setAttrib(e,n,v);
557 t.directory = p[1]; 557 });
558 t.file = p[2]; 558 }
559 559 */
560 // Rebuild source 560 }
561 t.source = ''; 561
562 t.getURI(); 562/*
563 }, 563 'tinymce.dom.Event' : {
564 564 add : function (o, n, f, s) {
565 toRelative : function(u) { 565 var lo, cb;
566 var t = this, o; 566
567 567 cb = function(e) {
568 if (u === "./") 568 e.target = e.target || this;
569 return u; 569 f.call(s || this, e);
570 570 };
571 u = new tinymce.util.URI(u, {base_uri : t}); 571
572 572 if (is(o, 'array') && is(o[0], 'string'))
573 // Not on same domain/port or protocol 573 o = o.join(',#');
574 if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol) 574 o = $(is(o, 'string') ? '#' + o : o);
575 return u.getURI(); 575 if (n == 'init') {
576 576 o.ready(cb, s);
577 o = t.toRelPath(t.path, u.path); 577 } else {
578 578 if (s) {
579 // Add query 579 o.bind(n, s, cb);
580 if (u.query) 580 } else {
581 o += '?' + u.query; 581 o.bind(n, cb);
582 582 }
583 // Add anchor 583 }
584 if (u.anchor) 584
585 o += '#' + u.anchor; 585 lo = this._jqLookup || (this._jqLookup = []);
586 586 lo.push({func : f, cfunc : cb});
587 return o; 587
588 }, 588 return cb;
589 589 },
590 toAbsolute : function(u, nh) { 590
591 var u = new tinymce.util.URI(u, {base_uri : this}); 591 remove : function(o, n, f) {
592 592 // Find cfunc
593 return u.getURI(this.host == u.host ? nh : 0); 593 $(this._jqLookup).each(function() {
594 }, 594 if (this.func === f)
595 595 f = this.cfunc;
596 toRelPath : function(base, path) { 596 });
597 var items, bp = 0, out = '', i, l; 597
598 598 if (is(o, 'array') && is(o[0], 'string'))
599 // Split the paths 599 o = o.join(',#');
600 base = base.substring(0, base.lastIndexOf('/')); 600
601 base = base.split('/'); 601 $(is(o, 'string') ? '#' + o : o).unbind(n,f);
602 items = path.split('/'); 602
603 603 return true;
604 if (base.length >= items.length) { 604 }
605 for (i = 0, l = base.length; i < l; i++) { 605 }
606 if (i >= items.length || base[i] != items[i]) { 606*/
607 bp = i + 1; 607 };
608 break; 608
609 } 609 // Patch functions after a class is created
610 } 610 tinymce.onCreate = function(ty, c, p) {
611 } 611 tinymce.extend(p, patches[c]);
612 612 };
613 if (base.length < items.length) { 613})(jQuery, tinymce);
614 for (i = 0, l = items.length; i < l; i++) { 614
615 if (i >= base.length || base[i] != items[i]) { 615tinymce.create('tinymce.util.Dispatcher', {
616 bp = i + 1; 616 scope : null,
617 break; 617 listeners : null,
618 } 618
619 } 619 Dispatcher : function(s) {
620 } 620 this.scope = s || this;
621 621 this.listeners = [];
622 if (bp == 1) 622 },
623 return path; 623
624 624 add : function(cb, s) {
625 for (i = 0, l = base.length - (bp - 1); i < l; i++) 625 this.listeners.push({cb : cb, scope : s || this.scope});
626 out += "../"; 626
627 627 return cb;
628 for (i = bp - 1, l = items.length; i < l; i++) { 628 },
629 if (i != bp - 1) 629
630 out += "/" + items[i]; 630 addToTop : function(cb, s) {
631 else 631 this.listeners.unshift({cb : cb, scope : s || this.scope});
632 out += items[i]; 632
633 } 633 return cb;
634 634 },
635 return out; 635
636 }, 636 remove : function(cb) {
637 637 var l = this.listeners, o = null;
638 toAbsPath : function(base, path) { 638
639 var i, nb = 0, o = []; 639 tinymce.each(l, function(c, i) {
640 640 if (cb == c.cb) {
641 // Split paths 641 o = cb;
642 base = base.split('/'); 642 l.splice(i, 1);
643 path = path.split('/'); 643 return false;
644 644 }
645 // Remove empty chunks 645 });
646 each(base, function(k) { 646
647 if (k) 647 return o;
648 o.push(k); 648 },
649 }); 649
650 650 dispatch : function() {
651 base = o; 651 var s, a = arguments, i, li = this.listeners, c;
652 652
653 // Merge relURLParts chunks 653 // Needs to be a real loop since the listener count might change while looping
654 for (i = path.length - 1, o = []; i >= 0; i--) { 654 // And this is also more efficient
655 // Ignore empty or . 655 for (i = 0; i<li.length; i++) {
656 if (path[i].length == 0 || path[i] == ".") 656 c = li[i];
657 continue; 657 s = c.cb.apply(c.scope, a);
658 658
659 // Is parent 659 if (s === false)
660 if (path[i] == '..') { 660 break;
661 nb++; 661 }
662 continue; 662
663 } 663 return s;
664 664 }
665 // Move up 665
666 if (nb > 0) { 666 });
667 nb--; 667(function() {
668 continue; 668 var each = tinymce.each;
669 } 669
670 670 tinymce.create('tinymce.util.URI', {
671 o.push(path[i]); 671 URI : function(u, s) {
672 } 672 var t = this, o, a, b;
673 673
674 i = base.length - nb; 674 // Trim whitespace
675 675 u = tinymce.trim(u);
676 // If /a/b/c or / 676
677 if (i <= 0) 677 // Default settings
678 return '/' + o.reverse().join('/'); 678 s = t.settings = s || {};
679 679
680 return '/' + base.slice(0, i).join('/') + '/' + o.reverse().join('/'); 680 // Strange app protocol or local anchor
681 }, 681 if (/^(mailto|tel|news|javascript|about|data):/i.test(u) || /^\s*#/.test(u)) {
682 682 t.source = u;
683 getURI : function(nh) { 683 return;
684 var s, t = this; 684 }
685 685
686 // Rebuild source 686 // Absolute path with no host, fake host and protocol
687 if (!t.source || nh) { 687 if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)
688 s = ''; 688 u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;
689 689
690 if (!nh) { 690 // Relative path http:// or protocol relative //path
691 if (t.protocol) 691 if (!/^\w*:?\/\//.test(u))
692 s += t.protocol + '://'; 692 u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u);
693 693
694 if (t.userInfo) 694 // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)
695 s += t.userInfo + '@'; 695 u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something
696 696 u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);
697 if (t.host) 697 each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {
698 s += t.host; 698 var s = u[i];
699 699
700 if (t.port) 700 // Zope 3 workaround, they use @@something
701 s += ':' + t.port; 701 if (s)
702 } 702 s = s.replace(/\(mce_at\)/g, '@@');
703 703
704 if (t.path) 704 t[v] = s;
705 s += t.path; 705 });
706 706
707 if (t.query) 707 if (b = s.base_uri) {
708 s += '?' + t.query; 708 if (!t.protocol)
709 709 t.protocol = b.protocol;
710 if (t.anchor) 710
711 s += '#' + t.anchor; 711 if (!t.userInfo)
712 712 t.userInfo = b.userInfo;
713 t.source = s; 713
714 } 714 if (!t.port && t.host == 'mce_host')
715 715 t.port = b.port;
716 return t.source; 716
717 } 717 if (!t.host || t.host == 'mce_host')
718 718 t.host = b.host;
719 }); 719
720})(); 720 t.source = '';
721 721 }
722/* file:jscripts/tiny_mce/classes/util/Cookie.js */ 722
723 723 //t.path = t.path || '/';
724(function() { 724 },
725 var each = tinymce.each; 725
726 726 setPath : function(p) {
727 tinymce.create('static tinymce.util.Cookie', { 727 var t = this;
728 getHash : function(n) { 728
729 var v = this.get(n), h; 729 p = /^(.*?)\/?(\w+)?$/.exec(p);
730 730
731 if (v) { 731 // Update path parts
732 each(v.split('&'), function(v) { 732 t.path = p[0];
733 v = v.split('='); 733 t.directory = p[1];
734 h = h || {}; 734 t.file = p[2];
735 h[unescape(v[0])] = unescape(v[1]); 735
736 }); 736 // Rebuild source
737 } 737 t.source = '';
738 738 t.getURI();
739 return h; 739 },
740 }, 740
741 741 toRelative : function(u) {
742 setHash : function(n, v, e, p, d, s) { 742 var t = this, o;
743 var o = ''; 743
744 744 if (u === "./")
745 each(v, function(v, k) { 745 return u;
746 o += (!o ? '' : '&') + escape(k) + '=' + escape(v); 746
747 }); 747 u = new tinymce.util.URI(u, {base_uri : t});
748 748
749 this.set(n, o, e, p, d, s); 749 // Not on same domain/port or protocol
750 }, 750 if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)
751 751 return u.getURI();
752 get : function(n) { 752
753 var c = document.cookie, e, p = n + "=", b; 753 o = t.toRelPath(t.path, u.path);
754 754
755 // Strict mode 755 // Add query
756 if (!c) 756 if (u.query)
757 return; 757 o += '?' + u.query;
758 758
759 b = c.indexOf("; " + p); 759 // Add anchor
760 760 if (u.anchor)
761 if (b == -1) { 761 o += '#' + u.anchor;
762 b = c.indexOf(p); 762
763 763 return o;
764 if (b != 0) 764 },
765 return null; 765
766 } else 766 toAbsolute : function(u, nh) {
767 b += 2; 767 var u = new tinymce.util.URI(u, {base_uri : this});
768 768
769 e = c.indexOf(";", b); 769 return u.getURI(this.host == u.host ? nh : 0);
770 770 },
771 if (e == -1) 771
772 e = c.length; 772 toRelPath : function(base, path) {
773 773 var items, bp = 0, out = '', i, l;
774 return unescape(c.substring(b + p.length, e)); 774
775 }, 775 // Split the paths
776 776 base = base.substring(0, base.lastIndexOf('/'));
777 set : function(n, v, e, p, d, s) { 777 base = base.split('/');
778 document.cookie = n + "=" + escape(v) + 778 items = path.split('/');
779 ((e) ? "; expires=" + e.toGMTString() : "") + 779
780 ((p) ? "; path=" + escape(p) : "") + 780 if (base.length >= items.length) {
781 ((d) ? "; domain=" + d : "") + 781 for (i = 0, l = base.length; i < l; i++) {
782 ((s) ? "; secure" : ""); 782 if (i >= items.length || base[i] != items[i]) {
783 }, 783 bp = i + 1;
784 784 break;
785 remove : function(n, p) { 785 }
786 var d = new Date(); 786 }
787 787 }
788 d.setTime(d.getTime() - 1000); 788
789 789 if (base.length < items.length) {
790 this.set(n, '', d, p, d); 790 for (i = 0, l = items.length; i < l; i++) {
791 } 791 if (i >= base.length || base[i] != items[i]) {
792 792 bp = i + 1;
793 }); 793 break;
794})(); 794 }
795 795 }
796/* file:jscripts/tiny_mce/classes/util/JSON.js */ 796 }
797 797
798tinymce.create('static tinymce.util.JSON', { 798 if (bp == 1)
799 serialize : function(o) { 799 return path;
800 var i, v, s = tinymce.util.JSON.serialize, t; 800
801 801 for (i = 0, l = base.length - (bp - 1); i < l; i++)
802 if (o == null) 802 out += "../";
803 return 'null'; 803
804 804 for (i = bp - 1, l = items.length; i < l; i++) {
805 t = typeof o; 805 if (i != bp - 1)
806 806 out += "/" + items[i];
807 if (t == 'string') { 807 else
808 v = '\bb\tt\nn\ff\rr\""\'\'\\\\'; 808 out += items[i];
809 809 }
810 return '"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function(a, b) { 810
811 i = v.indexOf(b); 811 return out;
812 812 },
813 if (i + 1) 813
814 return '\\' + v.charAt(i + 1); 814 toAbsPath : function(base, path) {
815 815 var i, nb = 0, o = [], tr;
816 a = b.charCodeAt().toString(16); 816
817 817 // Split paths
818 return '\\u' + '0000'.substring(a.length) + a; 818 tr = /\/$/.test(path) ? '/' : '';
819 }) + '"'; 819 base = base.split('/');
820 } 820 path = path.split('/');
821 821
822 if (t == 'object') { 822 // Remove empty chunks
823 if (o instanceof Array) { 823 each(base, function(k) {
824 for (i=0, v = '['; i<o.length; i++) 824 if (k)
825 v += (i > 0 ? ',' : '') + s(o[i]); 825 o.push(k);
826 826 });
827 return v + ']'; 827
828 } 828 base = o;
829 829
830 v = '{'; 830 // Merge relURLParts chunks
831 831 for (i = path.length - 1, o = []; i >= 0; i--) {
832 for (i in o) 832 // Ignore empty or .
833 v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : ''; 833 if (path[i].length == 0 || path[i] == ".")
834 834 continue;
835 return v + '}'; 835
836 } 836 // Is parent
837 837 if (path[i] == '..') {
838 return '' + o; 838 nb++;
839 }, 839 continue;
840 840 }
841 parse : function(s) { 841
842 try { 842 // Move up
843 return eval('(' + s + ')'); 843 if (nb > 0) {
844 } catch (ex) { 844 nb--;
845 // Ignore 845 continue;
846 } 846 }
847 } 847
848 848 o.push(path[i]);
849 }); 849 }
850 850
851/* file:jscripts/tiny_mce/classes/util/XHR.js */ 851 i = base.length - nb;
852 852
853tinymce.create('static tinymce.util.XHR', { 853 // If /a/b/c or /
854 send : function(o) { 854 if (i <= 0)
855 var x, t, w = window, c = 0; 855 return '/' + o.reverse().join('/') + tr;
856 856
857 // Default settings 857 return '/' + base.slice(0, i).join('/') + '/' + o.reverse().join('/') + tr;
858 o.scope = o.scope || this; 858 },
859 o.success_scope = o.success_scope || o.scope; 859
860 o.error_scope = o.error_scope || o.scope; 860 getURI : function(nh) {
861 o.async = o.async === false ? false : true; 861 var s, t = this;
862 o.data = o.data || ''; 862
863 863 // Rebuild source
864 function get(s) { 864 if (!t.source || nh) {
865 x = 0; 865 s = '';
866 866
867 try { 867 if (!nh) {
868 x = new ActiveXObject(s); 868 if (t.protocol)
869 } catch (ex) { 869 s += t.protocol + '://';
870 } 870
871 871 if (t.userInfo)
872 return x; 872 s += t.userInfo + '@';
873 }; 873
874 874 if (t.host)
875 x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP'); 875 s += t.host;
876 876
877 if (x) { 877 if (t.port)
878 if (x.overrideMimeType) 878 s += ':' + t.port;
879 x.overrideMimeType(o.content_type); 879 }
880 880
881 x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async); 881 if (t.path)
882 882 s += t.path;
883 if (o.content_type) 883
884 x.setRequestHeader('Content-Type', o.content_type); 884 if (t.query)
885 885 s += '?' + t.query;
886 x.send(o.data); 886
887 887 if (t.anchor)
888 function ready() { 888 s += '#' + t.anchor;
889 if (!o.async || x.readyState == 4 || c++ > 10000) { 889
890 if (o.success && c < 10000 && x.status == 200) 890 t.source = s;
891 o.success.call(o.success_scope, '' + x.responseText, x, o); 891 }
892 else if (o.error) 892
893 o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o); 893 return t.source;
894 894 }
895 x = null; 895 });
896 } else 896})();
897 w.setTimeout(ready, 10); 897(function() {
898 }; 898 var each = tinymce.each;
899 899
900 // Syncronous request 900 tinymce.create('static tinymce.util.Cookie', {
901 if (!o.async) 901 getHash : function(n) {
902 return ready(); 902 var v = this.get(n), h;
903 903
904 // Wait for response, onReadyStateChange can not be used since it leaks memory in IE 904 if (v) {
905 t = w.setTimeout(ready, 10); 905 each(v.split('&'), function(v) {
906 } 906 v = v.split('=');
907 907 h = h || {};
908 } 908 h[unescape(v[0])] = unescape(v[1]);
909}); 909 });
910 910 }
911/* file:jscripts/tiny_mce/classes/util/JSONRequest.js */ 911
912 912 return h;
913(function() { 913 },
914 var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR; 914
915 915 setHash : function(n, v, e, p, d, s) {
916 tinymce.create('tinymce.util.JSONRequest', { 916 var o = '';
917 JSONRequest : function(s) { 917
918 this.settings = extend({ 918 each(v, function(v, k) {
919 }, s); 919 o += (!o ? '' : '&') + escape(k) + '=' + escape(v);
920 this.count = 0; 920 });
921 }, 921
922 922 this.set(n, o, e, p, d, s);
923 send : function(o) { 923 },
924 var ecb = o.error, scb = o.success; 924
925 925 get : function(n) {
926 o = extend(this.settings, o); 926 var c = document.cookie, e, p = n + "=", b;
927 927
928 o.success = function(c, x) { 928 // Strict mode
929 c = JSON.parse(c); 929 if (!c)
930 930 return;
931 if (typeof(c) == 'undefined') { 931
932 c = { 932 b = c.indexOf("; " + p);
933 error : 'JSON Parse error.' 933
934 }; 934 if (b == -1) {
935 } 935 b = c.indexOf(p);
936 936
937 if (c.error) 937 if (b != 0)
938 ecb.call(o.error_scope || o.scope, c.error, x); 938 return null;
939 else 939 } else
940 scb.call(o.success_scope || o.scope, c.result); 940 b += 2;
941 }; 941
942 942 e = c.indexOf(";", b);
943 o.error = function(ty, x) { 943
944 ecb.call(o.error_scope || o.scope, ty, x); 944 if (e == -1)
945 }; 945 e = c.length;
946 946
947 o.data = JSON.serialize({ 947 return unescape(c.substring(b + p.length, e));
948 id : o.id || 'c' + (this.count++), 948 },
949 method : o.method, 949
950 params : o.params 950 set : function(n, v, e, p, d, s) {
951 }); 951 document.cookie = n + "=" + escape(v) +
952 952 ((e) ? "; expires=" + e.toGMTString() : "") +
953 // JSON content type for Ruby on rails. Bug: #1883287 953 ((p) ? "; path=" + escape(p) : "") +
954 o.content_type = 'application/json'; 954 ((d) ? "; domain=" + d : "") +
955 955 ((s) ? "; secure" : "");
956 XHR.send(o); 956 },
957 }, 957
958 958 remove : function(n, p) {
959 'static' : { 959 var d = new Date();
960 sendRPC : function(o) { 960
961 return new tinymce.util.JSONRequest().send(o); 961 d.setTime(d.getTime() - 1000);
962 } 962
963 } 963 this.set(n, '', d, p, d);
964 964 }
965 }); 965 });
966}()); 966})();
967/* file:jscripts/tiny_mce/classes/dom/DOMUtils.js */ 967tinymce.create('static tinymce.util.JSON', {
968 968 serialize : function(o) {
969(function() { 969 var i, v, s = tinymce.util.JSON.serialize, t;
970 // Shorten names 970
971 var each = tinymce.each, is = tinymce.is; 971 if (o == null)
972 var isWebKit = tinymce.isWebKit, isIE = tinymce.isIE; 972 return 'null';
973 973
974 tinymce.create('tinymce.dom.DOMUtils', { 974 t = typeof o;
975 doc : null, 975
976 root : null, 976 if (t == 'string') {
977 files : null, 977 v = '\bb\tt\nn\ff\rr\""\'\'\\\\';
978 listeners : {}, 978
979 pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/, 979 return '"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function(a, b) {
980 cache : {}, 980 i = v.indexOf(b);
981 idPattern : /^#[\w]+$/, 981
982 elmPattern : /^[\w_*]+$/, 982 if (i + 1)
983 elmClassPattern : /^([\w_]*)\.([\w_]+)$/, 983 return '\\' + v.charAt(i + 1);
984 props : { 984
985 "for" : "htmlFor", 985 a = b.charCodeAt().toString(16);
986 "class" : "className", 986
987 className : "className", 987 return '\\u' + '0000'.substring(a.length) + a;
988 checked : "checked", 988 }) + '"';
989 disabled : "disabled", 989 }
990 maxlength : "maxLength", 990
991 readonly : "readOnly", 991 if (t == 'object') {
992 selected : "selected", 992 if (o.hasOwnProperty && o instanceof Array) {
993 value : "value", 993 for (i=0, v = '['; i<o.length; i++)
994 id : "id", 994 v += (i > 0 ? ',' : '') + s(o[i]);
995 name : "name", 995
996 type : "type" 996 return v + ']';
997 }, 997 }
998 998
999 DOMUtils : function(d, s) { 999 v = '{';
1000 var t = this; 1000
1001 1001 for (i in o)
1002 t.doc = d; 1002 v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : '';
1003 t.win = window; 1003
1004 t.files = {}; 1004 return v + '}';
1005 t.cssFlicker = false; 1005 }
1006 t.counter = 0; 1006
1007 t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat"; 1007 return '' + o;
1008 t.stdMode = d.documentMode === 8; 1008 },
1009 1009
1010 this.settings = s = tinymce.extend({ 1010 parse : function(s) {
1011 keep_values : false, 1011 try {
1012 hex_colors : 1, 1012 return eval('(' + s + ')');
1013 process_html : 1 1013 } catch (ex) {
1014 }, s); 1014 // Ignore
1015 1015 }
1016 // Fix IE6SP2 flicker and check it failed for pre SP2 1016 }
1017 if (tinymce.isIE6) { 1017
1018 try { 1018 });
1019 d.execCommand('BackgroundImageCache', false, true); 1019tinymce.create('static tinymce.util.XHR', {
1020 } catch (e) { 1020 send : function(o) {
1021 t.cssFlicker = true; 1021 var x, t, w = window, c = 0;
1022 } 1022
1023 } 1023 // Default settings
1024 1024 o.scope = o.scope || this;
1025 tinymce.addUnload(t.destroy, t); 1025 o.success_scope = o.success_scope || o.scope;
1026 }, 1026 o.error_scope = o.error_scope || o.scope;
1027 1027 o.async = o.async === false ? false : true;
1028 getRoot : function() { 1028 o.data = o.data || '';
1029 var t = this, s = t.settings; 1029
1030 1030 function get(s) {
1031 return (s && t.get(s.root_element)) || t.doc.body; 1031 x = 0;
1032 }, 1032
1033 1033 try {
1034 getViewPort : function(w) { 1034 x = new ActiveXObject(s);
1035 var d, b; 1035 } catch (ex) {
1036 1036 }
1037 w = !w ? this.win : w; 1037
1038 d = w.document; 1038 return x;
1039 b = this.boxModel ? d.documentElement : d.body; 1039 };
1040 1040
1041 // Returns viewport size excluding scrollbars 1041 x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');
1042 return { 1042
1043 x : w.pageXOffset || b.scrollLeft, 1043 if (x) {
1044 y : w.pageYOffset || b.scrollTop, 1044 if (x.overrideMimeType)
1045 w : w.innerWidth || b.clientWidth, 1045 x.overrideMimeType(o.content_type);
1046 h : w.innerHeight || b.clientHeight 1046
1047 }; 1047 x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);
1048 }, 1048
1049 1049 if (o.content_type)
1050 getRect : function(e) { 1050 x.setRequestHeader('Content-Type', o.content_type);
1051 var p, t = this, sr; 1051
1052 1052 x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
1053 e = t.get(e); 1053
1054 p = t.getPos(e); 1054 x.send(o.data);
1055 sr = t.getSize(e); 1055
1056 1056 function ready() {
1057 return { 1057 if (!o.async || x.readyState == 4 || c++ > 10000) {
1058 x : p.x, 1058 if (o.success && c < 10000 && x.status == 200)
1059 y : p.y, 1059 o.success.call(o.success_scope, '' + x.responseText, x, o);
1060 w : sr.w, 1060 else if (o.error)
1061 h : sr.h 1061 o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);
1062 }; 1062
1063 }, 1063 x = null;
1064 1064 } else
1065 getSize : function(e) { 1065 w.setTimeout(ready, 10);
1066 var t = this, w, h; 1066 };
1067 1067
1068 e = t.get(e); 1068 // Syncronous request
1069 w = t.getStyle(e, 'width'); 1069 if (!o.async)
1070 h = t.getStyle(e, 'height'); 1070 return ready();
1071 1071
1072 // Non pixel value, then force offset/clientWidth 1072 // Wait for response, onReadyStateChange can not be used since it leaks memory in IE
1073 if (w.indexOf('px') === -1) 1073 t = w.setTimeout(ready, 10);
1074 w = 0; 1074 }
1075 1075 }
1076 // Non pixel value, then force offset/clientWidth 1076});
1077 if (h.indexOf('px') === -1) 1077(function() {
1078 h = 0; 1078 var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;
1079 1079
1080 return { 1080 tinymce.create('tinymce.util.JSONRequest', {
1081 w : parseInt(w) || e.offsetWidth || e.clientWidth, 1081 JSONRequest : function(s) {
1082 h : parseInt(h) || e.offsetHeight || e.clientHeight 1082 this.settings = extend({
1083 }; 1083 }, s);
1084 }, 1084 this.count = 0;
1085 1085 },
1086 getParent : function(n, f, r) { 1086
1087 var na, se = this.settings; 1087 send : function(o) {
1088 1088 var ecb = o.error, scb = o.success;
1089 n = this.get(n); 1089
1090 1090 o = extend(this.settings, o);
1091 if (se.strict_root) 1091
1092 r = r || this.getRoot(); 1092 o.success = function(c, x) {
1093 1093 c = JSON.parse(c);
1094 // Wrap node name as func 1094
1095 if (is(f, 'string')) { 1095 if (typeof(c) == 'undefined') {
1096 na = f.toUpperCase(); 1096 c = {
1097 1097 error : 'JSON Parse error.'
1098 f = function(n) { 1098 };
1099 var s = false; 1099 }
1100 1100
1101 // Any element 1101 if (c.error)
1102 if (n.nodeType == 1 && na === '*') { 1102 ecb.call(o.error_scope || o.scope, c.error, x);
1103 s = true; 1103 else
1104 return false; 1104 scb.call(o.success_scope || o.scope, c.result);
1105 } 1105 };
1106 1106
1107 each(na.split(','), function(v) { 1107 o.error = function(ty, x) {
1108 if (n.nodeType == 1 && ((se.strict && n.nodeName.toUpperCase() == v) || n.nodeName.toUpperCase() == v)) { 1108 ecb.call(o.error_scope || o.scope, ty, x);
1109 s = true; 1109 };
1110 return false; // Break loop 1110
1111 } 1111 o.data = JSON.serialize({
1112 }); 1112 id : o.id || 'c' + (this.count++),
1113 1113 method : o.method,
1114 return s; 1114 params : o.params
1115 }; 1115 });
1116 } 1116
1117 1117 // JSON content type for Ruby on rails. Bug: #1883287
1118 while (n) { 1118 o.content_type = 'application/json';
1119 if (n == r) 1119
1120 return null; 1120 XHR.send(o);
1121 1121 },
1122 if (f(n)) 1122
1123 return n; 1123 'static' : {
1124 1124 sendRPC : function(o) {
1125 n = n.parentNode; 1125 return new tinymce.util.JSONRequest().send(o);
1126 } 1126 }
1127 1127 }
1128 return null; 1128 });
1129 }, 1129}());(function(tinymce) {
1130 1130 // Shorten names
1131 get : function(e) { 1131 var each = tinymce.each, is = tinymce.is;
1132 var n; 1132 var isWebKit = tinymce.isWebKit, isIE = tinymce.isIE;
1133 1133
1134 if (e && this.doc && typeof(e) == 'string') { 1134 tinymce.create('tinymce.dom.DOMUtils', {
1135 n = e; 1135 doc : null,
1136 e = this.doc.getElementById(e); 1136 root : null,
1137 1137 files : null,
1138 // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick 1138 pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,
1139 if (e && e.id !== n) 1139 props : {
1140 return this.doc.getElementsByName(n)[1]; 1140 "for" : "htmlFor",
1141 } 1141 "class" : "className",
1142 1142 className : "className",
1143 return e; 1143 checked : "checked",
1144 }, 1144 disabled : "disabled",
1145 1145 maxlength : "maxLength",
1146 1146 readonly : "readOnly",
1147 // #if !jquery 1147 selected : "selected",
1148 1148 value : "value",
1149 select : function(pa, s) { 1149 id : "id",
1150 var t = this, cs, c, pl, o = [], x, i, l, n, xp; 1150 name : "name",
1151 1151 type : "type"
1152 s = t.get(s) || t.doc; 1152 },
1153 1153
1154 // Look for native support and use that if it's found 1154 DOMUtils : function(d, s) {
1155 if (s.querySelectorAll) { 1155 var t = this;
1156 // Element scope then use temp id 1156
1157 // We need to do this to be compatible with other implementations 1157 t.doc = d;
1158 // See bug report: http://bugs.webkit.org/show_bug.cgi?id=17461 1158 t.win = window;
1159 if (s != t.doc) { 1159 t.files = {};
1160 i = s.id; 1160 t.cssFlicker = false;
1161 s.id = '_mc_tmp'; 1161 t.counter = 0;
1162 pa = '#_mc_tmp ' + pa; 1162 t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat";
1163 } 1163 t.stdMode = d.documentMode === 8;
1164 1164
1165 // Select elements 1165 t.settings = s = tinymce.extend({
1166 l = tinymce.grep(s.querySelectorAll(pa)); 1166 keep_values : false,
1167 1167 hex_colors : 1,
1168 // Restore old id 1168 process_html : 1
1169 s.id = i; 1169 }, s);
1170 1170
1171 return l; 1171 // Fix IE6SP2 flicker and check it failed for pre SP2
1172 } 1172 if (tinymce.isIE6) {
1173 1173 try {
1174 if (!t.selectorRe) 1174 d.execCommand('BackgroundImageCache', false, true);
1175 t.selectorRe = /^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i;; 1175 } catch (e) {
1176 1176 t.cssFlicker = true;
1177 // Air doesn't support eval due to security sandboxing and querySelectorAll isn't supported yet 1177 }
1178 if (tinymce.isAir) { 1178 }
1179 each(tinymce.explode(pa), function(v) { 1179
1180 if (!(xp = t.cache[v])) { 1180 tinymce.addUnload(t.destroy, t);
1181 xp = ''; 1181 },
1182 1182
1183 each(v.split(' '), function(v) { 1183 getRoot : function() {
1184 v = t.selectorRe.exec(v); 1184 var t = this, s = t.settings;
1185 1185
1186 xp += v[1] ? '//' + v[1] : '//*'; 1186 return (s && t.get(s.root_element)) || t.doc.body;
1187 1187 },
1188 // Id 1188
1189 if (v[2]) 1189 getViewPort : function(w) {
1190 xp += "[@id='" + v[2] + "']"; 1190 var d, b;
1191 1191
1192 // Class 1192 w = !w ? this.win : w;
1193 if (v[3]) { 1193 d = w.document;
1194 each(v[3].split('.'), function(n) { 1194 b = this.boxModel ? d.documentElement : d.body;
1195 xp += "[@class = '" + n + "' or contains(concat(' ', @class, ' '), ' " + n + " ')]"; 1195
1196 }); 1196 // Returns viewport size excluding scrollbars
1197 } 1197 return {
1198 }); 1198 x : w.pageXOffset || b.scrollLeft,
1199 1199 y : w.pageYOffset || b.scrollTop,
1200 t.cache[v] = xp; 1200 w : w.innerWidth || b.clientWidth,
1201 } 1201 h : w.innerHeight || b.clientHeight
1202 1202 };
1203 xp = t.doc.evaluate(xp, s, null, 4, null); 1203 },
1204 1204
1205 while (n = xp.iterateNext()) 1205 getRect : function(e) {
1206 o.push(n); 1206 var p, t = this, sr;
1207 }); 1207
1208 1208 e = t.get(e);
1209 return o; 1209 p = t.getPos(e);
1210 } 1210 sr = t.getSize(e);
1211 1211
1212 if (t.settings.strict) { 1212 return {
1213 function get(s, n) { 1213 x : p.x,
1214 return s.getElementsByTagName(n.toLowerCase()); 1214 y : p.y,
1215 }; 1215 w : sr.w,
1216 } else { 1216 h : sr.h
1217 function get(s, n) { 1217 };
1218 return s.getElementsByTagName(n); 1218 },
1219 }; 1219
1220 } 1220 getSize : function(e) {
1221 1221 var t = this, w, h;
1222 // Simple element pattern. For example: "p" or "*" 1222
1223 if (t.elmPattern.test(pa)) { 1223 e = t.get(e);
1224 x = get(s, pa); 1224 w = t.getStyle(e, 'width');
1225 1225 h = t.getStyle(e, 'height');
1226 for (i = 0, l = x.length; i<l; i++) 1226
1227 o.push(x[i]); 1227 // Non pixel value, then force offset/clientWidth
1228 1228 if (w.indexOf('px') === -1)
1229 return o; 1229 w = 0;
1230 } 1230
1231 1231 // Non pixel value, then force offset/clientWidth
1232 // Simple class pattern. For example: "p.class" or ".class" 1232 if (h.indexOf('px') === -1)
1233 if (t.elmClassPattern.test(pa)) { 1233 h = 0;
1234 pl = t.elmClassPattern.exec(pa); 1234
1235 x = get(s, pl[1] || '*'); 1235 return {
1236 c = ' ' + pl[2] + ' '; 1236 w : parseInt(w) || e.offsetWidth || e.clientWidth,
1237 1237 h : parseInt(h) || e.offsetHeight || e.clientHeight
1238 for (i = 0, l = x.length; i<l; i++) { 1238 };
1239 n = x[i]; 1239 },
1240 1240
1241 if (n.className && (' ' + n.className + ' ').indexOf(c) !== -1) 1241 getParent : function(n, f, r) {
1242 o.push(n); 1242 return this.getParents(n, f, r, false);
1243 } 1243 },
1244 1244
1245 return o; 1245 getParents : function(n, f, r, c) {
1246 } 1246 var t = this, na, se = t.settings, o = [];
1247 1247
1248 function collect(n) { 1248 n = t.get(n);
1249 if (!n.mce_save) { 1249 c = c === undefined;
1250 n.mce_save = 1; 1250
1251 o.push(n); 1251 if (se.strict_root)
1252 } 1252 r = r || t.getRoot();
1253 }; 1253
1254 1254 // Wrap node name as func
1255 function collectIE(n) { 1255 if (is(f, 'string')) {
1256 if (!n.getAttribute('mce_save')) { 1256 na = f;
1257 n.setAttribute('mce_save', '1'); 1257
1258 o.push(n); 1258 if (f === '*') {
1259 } 1259 f = function(n) {return n.nodeType == 1;};
1260 }; 1260 } else {
1261 1261 f = function(n) {
1262 function find(n, f, r) { 1262 return t.is(n, na);
1263 var i, l, nl = get(r, n); 1263 };
1264 1264 }
1265 for (i = 0, l = nl.length; i < l; i++) 1265 }
1266 f(nl[i]); 1266
1267 }; 1267 while (n) {
1268 1268 if (n == r || !n.nodeType || n.nodeType === 9)
1269 each(pa.split(','), function(v, i) { 1269 break;
1270 v = tinymce.trim(v); 1270
1271 1271 if (!f || f(n)) {
1272 // Simple element pattern, most common in TinyMCE 1272 if (c)
1273 if (t.elmPattern.test(v)) { 1273 o.push(n);
1274 each(get(s, v), function(n) { 1274 else
1275 collect(n); 1275 return n;
1276 }); 1276 }
1277 1277
1278 return; 1278 n = n.parentNode;
1279 } 1279 }
1280 1280
1281 // Simple element pattern with class, fairly common in TinyMCE 1281 return c ? o : null;
1282 if (t.elmClassPattern.test(v)) { 1282 },
1283 x = t.elmClassPattern.exec(v); 1283
1284 1284 get : function(e) {
1285 each(get(s, x[1]), function(n) { 1285 var n;
1286 if (t.hasClass(n, x[2])) 1286
1287 collect(n); 1287 if (e && this.doc && typeof(e) == 'string') {
1288 }); 1288 n = e;
1289 1289 e = this.doc.getElementById(e);
1290 return; 1290
1291 } 1291 // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick
1292 1292 if (e && e.id !== n)
1293 if (!(cs = t.cache[pa])) { 1293 return this.doc.getElementsByName(n)[1];
1294 cs = 'x=(function(cf, s) {'; 1294 }
1295 pl = v.split(' '); 1295
1296 1296 return e;
1297 each(pl, function(v) { 1297 },
1298 var p = t.selectorRe.exec(v); 1298
1299 1299 getNext : function(node, selector) {
1300 // Find elements 1300 return this._findSib(node, selector, 'nextSibling');
1301 p[1] = p[1] || '*'; 1301 },
1302 cs += 'find("' + p[1] + '", function(n) {'; 1302
1303 1303 getPrev : function(node, selector) {
1304 // Check id 1304 return this._findSib(node, selector, 'previousSibling');
1305 if (p[2]) 1305 },
1306 cs += 'if (n.id !== "' + p[2] + '") return;'; 1306
1307 1307
1308 // Check classes 1308 add : function(p, n, a, h, c) {
1309 if (p[3]) { 1309 var t = this;
1310 cs += 'var c = " " + n.className + " ";'; 1310
1311 cs += 'if ('; 1311 return this.run(p, function(p) {
1312 c = ''; 1312 var e, k;
1313 each(p[3].split('.'), function(v) { 1313
1314 if (v) 1314 e = is(n, 'string') ? t.doc.createElement(n) : n;
1315 c += (c ? '||' : '') + 'c.indexOf(" ' + v + ' ") === -1'; 1315 t.setAttribs(e, a);
1316 }); 1316
1317 cs += c + ') return;'; 1317 if (h) {
1318 } 1318 if (h.nodeType)
1319 }); 1319 e.appendChild(h);
1320 1320 else
1321 cs += 'cf(n);'; 1321 t.setHTML(e, h);
1322 1322 }
1323 for (i = pl.length - 1; i >= 0; i--) 1323
1324 cs += '}, ' + (i ? 'n' : 's') + ');'; 1324 return !c ? p.appendChild(e) : e;
1325 1325 });
1326 cs += '})'; 1326 },
1327 1327
1328 // Compile CSS pattern function 1328 create : function(n, a, h) {
1329 t.cache[pa] = cs = eval(cs); 1329 return this.add(this.doc.createElement(n), n, a, h, 1);
1330 } 1330 },
1331 1331
1332 // Run selector function 1332 createHTML : function(n, a, h) {
1333 cs(isIE ? collectIE : collect, s); 1333 var o = '', t = this, k;
1334 }); 1334
1335 1335 o += '<' + n;
1336 // Cleanup 1336
1337 each(o, function(n) { 1337 for (k in a) {
1338 if (isIE) 1338 if (a.hasOwnProperty(k))
1339 n.removeAttribute('mce_save'); 1339 o += ' ' + k + '="' + t.encode(a[k]) + '"';
1340 else 1340 }
1341 delete n.mce_save; 1341
1342 }); 1342 if (tinymce.is(h))
1343 1343 return o + '>' + h + '</' + n + '>';
1344 return o; 1344
1345 }, 1345 return o + ' />';
1346 1346 },
1347 // #endif 1347
1348 1348 remove : function(n, k) {
1349 add : function(p, n, a, h, c) { 1349 var t = this;
1350 var t = this; 1350
1351 1351 return this.run(n, function(n) {
1352 return this.run(p, function(p) { 1352 var p, g, i;
1353 var e, k; 1353
1354 1354 p = n.parentNode;
1355 e = is(n, 'string') ? t.doc.createElement(n) : n; 1355
1356 t.setAttribs(e, a); 1356 if (!p)
1357 1357 return null;
1358 if (h) { 1358
1359 if (h.nodeType) 1359 if (k) {
1360 e.appendChild(h); 1360 for (i = n.childNodes.length - 1; i >= 0; i--)
1361 else 1361 t.insertAfter(n.childNodes[i], n);
1362 t.setHTML(e, h); 1362
1363 } 1363 //each(n.childNodes, function(c) {
1364 1364 // p.insertBefore(c.cloneNode(true), n);
1365 return !c ? p.appendChild(e) : e; 1365 //});
1366 }); 1366 }
1367 }, 1367
1368 1368 // Fix IE psuedo leak
1369 create : function(n, a, h) { 1369 if (t.fixPsuedoLeaks) {
1370 return this.add(this.doc.createElement(n), n, a, h, 1); 1370 p = n.cloneNode(true);
1371 }, 1371 k = 'IELeakGarbageBin';
1372 1372 g = t.get(k) || t.add(t.doc.body, 'div', {id : k, style : 'display:none'});
1373 createHTML : function(n, a, h) { 1373 g.appendChild(n);
1374 var o = '', t = this, k; 1374 g.innerHTML = '';
1375 1375
1376 o += '<' + n; 1376 return p;
1377 1377 }
1378 for (k in a) { 1378
1379 if (a.hasOwnProperty(k)) 1379 return p.removeChild(n);
1380 o += ' ' + k + '="' + t.encode(a[k]) + '"'; 1380 });
1381 } 1381 },
1382 1382
1383 if (tinymce.is(h)) 1383 setStyle : function(n, na, v) {
1384 return o + '>' + h + '</' + n + '>'; 1384 var t = this;
1385 1385
1386 return o + ' />'; 1386 return t.run(n, function(e) {
1387 }, 1387 var s, i;
1388 1388
1389 remove : function(n, k) { 1389 s = e.style;
1390 return this.run(n, function(n) { 1390
1391 var p, g; 1391 // Camelcase it, if needed
1392 1392 na = na.replace(/-(\D)/g, function(a, b){
1393 p = n.parentNode; 1393 return b.toUpperCase();
1394 1394 });
1395 if (!p) 1395
1396 return null; 1396 // Default px suffix on these
1397 1397 if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))
1398 if (k) { 1398 v += 'px';
1399 each (n.childNodes, function(c) { 1399
1400 p.insertBefore(c.cloneNode(true), n); 1400 switch (na) {
1401 }); 1401 case 'opacity':
1402 } 1402 // IE specific opacity
1403 1403 if (isIE) {
1404 // Fix IE psuedo leak 1404 s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";
1405 /* if (isIE) { 1405
1406 p = n.cloneNode(true); 1406 if (!n.currentStyle || !n.currentStyle.hasLayout)
1407 n.outerHTML = ''; 1407 s.display = 'inline-block';
1408 1408 }
1409 return p; 1409
1410 }*/ 1410 // Fix for older browsers
1411 1411 s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';
1412 return p.removeChild(n); 1412 break;
1413 }); 1413
1414 }, 1414 case 'float':
1415 1415 isIE ? s.styleFloat = v : s.cssFloat = v;
1416 // #if !jquery 1416 break;
1417 1417
1418 setStyle : function(n, na, v) { 1418 default:
1419 var t = this; 1419 s[na] = v || '';
1420 1420 }
1421 return t.run(n, function(e) { 1421
1422 var s, i; 1422 // Force update of the style data
1423 1423 if (t.settings.update_styles)
1424 s = e.style; 1424 t.setAttrib(e, 'mce_style');
1425 1425 });
1426 // Camelcase it, if needed 1426 },
1427 na = na.replace(/-(\D)/g, function(a, b){ 1427
1428 return b.toUpperCase(); 1428 getStyle : function(n, na, c) {
1429 }); 1429 n = this.get(n);
1430 1430
1431 // Default px suffix on these 1431 if (!n)
1432 if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v))) 1432 return false;
1433 v += 'px'; 1433
1434 1434 // Gecko
1435 switch (na) { 1435 if (this.doc.defaultView && c) {
1436 case 'opacity': 1436 // Remove camelcase
1437 // IE specific opacity 1437 na = na.replace(/[A-Z]/g, function(a){
1438 if (isIE) { 1438 return '-' + a;
1439 s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")"; 1439 });
1440 1440
1441 if (!n.currentStyle || !n.currentStyle.hasLayout) 1441 try {
1442 s.display = 'inline-block'; 1442 return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);
1443 } 1443 } catch (ex) {
1444 1444 // Old safari might fail
1445 // Fix for older browsers 1445 return null;
1446 s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || ''; 1446 }
1447 break; 1447 }
1448 1448
1449 case 'float': 1449 // Camelcase it, if needed
1450 isIE ? s.styleFloat = v : s.cssFloat = v; 1450 na = na.replace(/-(\D)/g, function(a, b){
1451 break; 1451 return b.toUpperCase();
1452 1452 });
1453 default: 1453
1454 s[na] = v || ''; 1454 if (na == 'float')
1455 } 1455 na = isIE ? 'styleFloat' : 'cssFloat';
1456 1456
1457 // Force update of the style data 1457 // IE & Opera
1458 if (t.settings.update_styles) 1458 if (n.currentStyle && c)
1459 t.setAttrib(e, 'mce_style'); 1459 return n.currentStyle[na];
1460 }); 1460
1461 }, 1461 return n.style[na];
1462 1462 },
1463 getStyle : function(n, na, c) { 1463
1464 n = this.get(n); 1464 setStyles : function(e, o) {
1465 1465 var t = this, s = t.settings, ol;
1466 if (!n) 1466
1467 return false; 1467 ol = s.update_styles;
1468 1468 s.update_styles = 0;
1469 // Gecko 1469
1470 if (this.doc.defaultView && c) { 1470 each(o, function(v, n) {
1471 // Remove camelcase 1471 t.setStyle(e, n, v);
1472 na = na.replace(/[A-Z]/g, function(a){ 1472 });
1473 return '-' + a; 1473
1474 }); 1474 // Update style info
1475 1475 s.update_styles = ol;
1476 try { 1476 if (s.update_styles)
1477 return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na); 1477 t.setAttrib(e, s.cssText);
1478 } catch (ex) { 1478 },
1479 // Old safari might fail 1479
1480 return null; 1480 setAttrib : function(e, n, v) {
1481 } 1481 var t = this;
1482 } 1482
1483 1483 // Whats the point
1484 // Camelcase it, if needed 1484 if (!e || !n)
1485 na = na.replace(/-(\D)/g, function(a, b){ 1485 return;
1486 return b.toUpperCase(); 1486
1487 }); 1487 // Strict XML mode
1488 1488 if (t.settings.strict)
1489 if (na == 'float') 1489 n = n.toLowerCase();
1490 na = isIE ? 'styleFloat' : 'cssFloat'; 1490
1491 1491 return this.run(e, function(e) {
1492 // IE & Opera 1492 var s = t.settings;
1493 if (n.currentStyle && c) 1493
1494 return n.currentStyle[na]; 1494 switch (n) {
1495 1495 case "style":
1496 return n.style[na]; 1496 if (!is(v, 'string')) {
1497 }, 1497 each(v, function(v, n) {
1498 1498 t.setStyle(e, n, v);
1499 setStyles : function(e, o) { 1499 });
1500 var t = this, s = t.settings, ol; 1500
1501 1501 return;
1502 ol = s.update_styles; 1502 }
1503 s.update_styles = 0; 1503
1504 1504 // No mce_style for elements with these since they might get resized by the user
1505 each(o, function(v, n) { 1505 if (s.keep_values) {
1506 t.setStyle(e, n, v); 1506 if (v && !t._isRes(v))
1507 }); 1507 e.setAttribute('mce_style', v, 2);
1508 1508 else
1509 // Update style info 1509 e.removeAttribute('mce_style', 2);
1510 s.update_styles = ol; 1510 }
1511 if (s.update_styles) 1511
1512 t.setAttrib(e, s.cssText); 1512 e.style.cssText = v;
1513 }, 1513 break;
1514 1514
1515 setAttrib : function(e, n, v) { 1515 case "class":
1516 var t = this; 1516 e.className = v || ''; // Fix IE null bug
1517 1517 break;
1518 // Whats the point 1518
1519 if (!e || !n) 1519 case "src":
1520 return; 1520 case "href":
1521 1521 if (s.keep_values) {
1522 // Strict XML mode 1522 if (s.url_converter)
1523 if (t.settings.strict) 1523 v = s.url_converter.call(s.url_converter_scope || t, v, n, e);
1524 n = n.toLowerCase(); 1524
1525 1525 t.setAttrib(e, 'mce_' + n, v, 2);
1526 return this.run(e, function(e) { 1526 }
1527 var s = t.settings; 1527
1528 1528 break;
1529 switch (n) { 1529
1530 case "style": 1530 case "shape":
1531 if (!is(v, 'string')) { 1531 e.setAttribute('mce_style', v);
1532 each(v, function(v, n) { 1532 break;
1533 t.setStyle(e, n, v); 1533 }
1534 }); 1534
1535 1535 if (is(v) && v !== null && v.length !== 0)
1536 return; 1536 e.setAttribute(n, '' + v, 2);
1537 } 1537 else
1538 1538 e.removeAttribute(n, 2);
1539 // No mce_style for elements with these since they might get resized by the user 1539 });
1540 if (s.keep_values) { 1540 },
1541 if (v && !t._isRes(v)) 1541
1542 e.setAttribute('mce_style', v, 2); 1542 setAttribs : function(e, o) {
1543 else 1543 var t = this;
1544 e.removeAttribute('mce_style', 2); 1544
1545 } 1545 return this.run(e, function(e) {
1546 1546 each(o, function(v, n) {
1547 e.style.cssText = v; 1547 t.setAttrib(e, n, v);
1548 break; 1548 });
1549 1549 });
1550 case "class": 1550 },
1551 e.className = v || ''; // Fix IE null bug 1551
1552 break; 1552 getAttrib : function(e, n, dv) {
1553 1553 var v, t = this;
1554 case "src": 1554
1555 case "href": 1555 e = t.get(e);
1556 if (s.keep_values) { 1556
1557 if (s.url_converter) 1557 if (!e || e.nodeType !== 1)
1558 v = s.url_converter.call(s.url_converter_scope || t, v, n, e); 1558 return false;
1559 1559
1560 t.setAttrib(e, 'mce_' + n, v, 2); 1560 if (!is(dv))
1561 } 1561 dv = '';
1562 1562
1563 break; 1563 // Try the mce variant for these
1564 1564 if (/^(src|href|style|coords|shape)$/.test(n)) {
1565 case "shape": 1565 v = e.getAttribute("mce_" + n);
1566 e.setAttribute('mce_style', v); 1566
1567 break; 1567 if (v)
1568 } 1568 return v;
1569 1569 }
1570 if (is(v) && v !== null && v.length !== 0) 1570
1571 e.setAttribute(n, '' + v, 2); 1571 if (isIE && t.props[n]) {
1572 else 1572 v = e[t.props[n]];
1573 e.removeAttribute(n, 2); 1573 v = v && v.nodeValue ? v.nodeValue : v;
1574 }); 1574 }
1575 }, 1575
1576 1576 if (!v)
1577 setAttribs : function(e, o) { 1577 v = e.getAttribute(n, 2);
1578 var t = this; 1578
1579 1579 if (n === 'style') {
1580 return this.run(e, function(e) { 1580 v = v || e.style.cssText;
1581 each(o, function(v, n) { 1581
1582 t.setAttrib(e, n, v); 1582 if (v) {
1583 }); 1583 v = t.serializeStyle(t.parseStyle(v));
1584 }); 1584
1585 }, 1585 if (t.settings.keep_values && !t._isRes(v))
1586 1586 e.setAttribute('mce_style', v);
1587 // #endif 1587 }
1588 1588 }
1589 getAttrib : function(e, n, dv) { 1589
1590 var v, t = this; 1590 // Remove Apple and WebKit stuff
1591 1591 if (isWebKit && n === "class" && v)
1592 e = t.get(e); 1592 v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');
1593 1593
1594 if (!e || e.nodeType !== 1) 1594 // Handle IE issues
1595 return false; 1595 if (isIE) {
1596 1596 switch (n) {
1597 if (!is(dv)) 1597 case 'rowspan':
1598 dv = ''; 1598 case 'colspan':
1599 1599 // IE returns 1 as default value
1600 // Try the mce variant for these 1600 if (v === 1)
1601 if (/^(src|href|style|coords|shape)$/.test(n)) { 1601 v = '';
1602 v = e.getAttribute("mce_" + n); 1602
1603 1603 break;
1604 if (v) 1604
1605 return v; 1605 case 'size':
1606 } 1606 // IE returns +0 as default value for size
1607 1607 if (v === '+0' || v === 20 || v === 0)
1608 if (isIE && t.props[n]) { 1608 v = '';
1609 v = e[t.props[n]]; 1609
1610 v = v && v.nodeValue ? v.nodeValue : v; 1610 break;
1611 } 1611
1612 1612 case 'width':
1613 if (!v) 1613 case 'height':
1614 v = e.getAttribute(n, 2); 1614 case 'vspace':
1615 1615 case 'checked':
1616 if (n === 'style') { 1616 case 'disabled':
1617 v = v || e.style.cssText; 1617 case 'readonly':
1618 1618 if (v === 0)
1619 if (v) { 1619 v = '';
1620 v = t.serializeStyle(t.parseStyle(v)); 1620
1621 1621 break;
1622 if (t.settings.keep_values && !t._isRes(v)) 1622
1623 e.setAttribute('mce_style', v); 1623 case 'hspace':
1624 } 1624 // IE returns -1 as default value
1625 } 1625 if (v === -1)
1626 1626 v = '';
1627 // Remove Apple and WebKit stuff 1627
1628 if (isWebKit && n === "class" && v) 1628 break;
1629 v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, ''); 1629
1630 1630 case 'maxlength':
1631 // Handle IE issues 1631 case 'tabindex':
1632 if (isIE) { 1632 // IE returns default value
1633 switch (n) { 1633 if (v === 32768 || v === 2147483647 || v === '32768')
1634 case 'rowspan': 1634 v = '';
1635 case 'colspan': 1635
1636 // IE returns 1 as default value 1636 break;
1637 if (v === 1) 1637
1638 v = ''; 1638 case 'multiple':
1639 1639 case 'compact':
1640 break; 1640 case 'noshade':
1641 1641 case 'nowrap':
1642 case 'size': 1642 if (v === 65535)
1643 // IE returns +0 as default value for size 1643 return n;
1644 if (v === '+0' || v === 20) 1644
1645 v = ''; 1645 return dv;
1646 1646
1647 break; 1647 case 'shape':
1648 1648 v = v.toLowerCase();
1649 case 'width': 1649 break;
1650 case 'height': 1650
1651 case 'vspace': 1651 default:
1652 case 'checked': 1652 // IE has odd anonymous function for event attributes
1653 case 'disabled': 1653 if (n.indexOf('on') === 0 && v)
1654 case 'readonly': 1654 v = ('' + v).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1');
1655 if (v === 0) 1655 }
1656 v = ''; 1656 }
1657 1657
1658 break; 1658 return (v !== undefined && v !== null && v !== '') ? '' + v : dv;
1659 1659 },
1660 case 'hspace': 1660
1661 // IE returns -1 as default value 1661 getPos : function(n, ro) {
1662 if (v === -1) 1662 var t = this, x = 0, y = 0, e, d = t.doc, r;
1663 v = ''; 1663
1664 1664 n = t.get(n);
1665 break; 1665 ro = ro || d.body;
1666 1666
1667 case 'maxlength': 1667 if (n) {
1668 case 'tabindex': 1668 // Use getBoundingClientRect on IE, Opera has it but it's not perfect
1669 // IE returns default value 1669 if (isIE && !t.stdMode) {
1670 if (v === 32768 || v === 2147483647 || v === '32768') 1670 n = n.getBoundingClientRect();
1671 v = ''; 1671 e = t.boxModel ? d.documentElement : d.body;
1672 1672 x = t.getStyle(t.select('html')[0], 'borderWidth'); // Remove border
1673 break; 1673 x = (x == 'medium' || t.boxModel && !t.isIE6) && 2 || x;
1674 1674 n.top += t.win.self != t.win.top ? 2 : 0; // IE adds some strange extra cord if used in a frameset
1675 case 'compact': 1675
1676 case 'noshade': 1676 return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x};
1677 case 'nowrap': 1677 }
1678 if (v === 65535) 1678
1679 return n; 1679 r = n;
1680 1680 while (r && r != ro && r.nodeType) {
1681 return dv; 1681 x += r.offsetLeft || 0;
1682 1682 y += r.offsetTop || 0;
1683 case 'shape': 1683 r = r.offsetParent;
1684 v = v.toLowerCase(); 1684 }
1685 break; 1685
1686 1686 r = n.parentNode;
1687 default: 1687 while (r && r != ro && r.nodeType) {
1688 // IE has odd anonymous function for event attributes 1688 x -= r.scrollLeft || 0;
1689 if (n.indexOf('on') === 0 && v) 1689 y -= r.scrollTop || 0;
1690 v = ('' + v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/, '$1'); 1690 r = r.parentNode;
1691 } 1691 }
1692 } 1692 }
1693 1693
1694 return (v !== undefined && v !== null && v !== '') ? '' + v : dv; 1694 return {x : x, y : y};
1695 }, 1695 },
1696 1696
1697 getPos : function(n) { 1697 parseStyle : function(st) {
1698 var t = this, x = 0, y = 0, e, d = t.doc, r; 1698 var t = this, s = t.settings, o = {};
1699 1699
1700 n = t.get(n); 1700 if (!st)
1701 1701 return o;
1702 // Use getBoundingClientRect on IE, Opera has it but it's not perfect 1702
1703 if (n && isIE) { 1703 function compress(p, s, ot) {
1704 n = n.getBoundingClientRect(); 1704 var t, r, b, l;
1705 e = t.boxModel ? d.documentElement : d.body; 1705
1706 x = t.getStyle(t.select('html')[0], 'borderWidth'); // Remove border 1706 // Get values and check it it needs compressing
1707 x = (x == 'medium' || t.boxModel && !t.isIE6) && 2 || x; 1707 t = o[p + '-top' + s];
1708 n.top += t.win.self != t.win.top ? 2 : 0; // IE adds some strange extra cord if used in a frameset 1708 if (!t)
1709 1709 return;
1710 return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x}; 1710
1711 } 1711 r = o[p + '-right' + s];
1712 1712 if (t != r)
1713 r = n; 1713 return;
1714 while (r) { 1714
1715 x += r.offsetLeft || 0; 1715 b = o[p + '-bottom' + s];
1716 y += r.offsetTop || 0; 1716 if (r != b)
1717 r = r.offsetParent; 1717 return;
1718 } 1718
1719 1719 l = o[p + '-left' + s];
1720 r = n; 1720 if (b != l)
1721 while (r) { 1721 return;
1722 // Opera 9.25 bug fix, fixed in 9.50 1722
1723 if (!/^table-row|inline.*/i.test(t.getStyle(r, "display", 1))) { 1723 // Compress
1724 x -= r.scrollLeft || 0; 1724 o[ot] = l;
1725 y -= r.scrollTop || 0; 1725 delete o[p + '-top' + s];
1726 } 1726 delete o[p + '-right' + s];
1727 1727 delete o[p + '-bottom' + s];
1728 r = r.parentNode; 1728 delete o[p + '-left' + s];
1729 1729 };
1730 if (r == d.body) 1730
1731 break; 1731 function compress2(ta, a, b, c) {
1732 } 1732 var t;
1733 1733
1734 return {x : x, y : y}; 1734 t = o[a];
1735 }, 1735 if (!t)
1736 1736 return;
1737 parseStyle : function(st) { 1737
1738 var t = this, s = t.settings, o = {}; 1738 t = o[b];
1739 1739 if (!t)
1740 if (!st) 1740 return;
1741 return o; 1741
1742 1742 t = o[c];
1743 function compress(p, s, ot) { 1743 if (!t)
1744 var t, r, b, l; 1744 return;
1745 1745
1746 // Get values and check it it needs compressing 1746 // Compress
1747 t = o[p + '-top' + s]; 1747 o[ta] = o[a] + ' ' + o[b] + ' ' + o[c];
1748 if (!t) 1748 delete o[a];
1749 return; 1749 delete o[b];
1750 1750 delete o[c];
1751 r = o[p + '-right' + s]; 1751 };
1752 if (t != r) 1752
1753 return; 1753 st = st.replace(/&(#?[a-z0-9]+);/g, '&$1_MCE_SEMI_'); // Protect entities
1754 1754
1755 b = o[p + '-bottom' + s]; 1755 each(st.split(';'), function(v) {
1756 if (r != b) 1756 var sv, ur = [];
1757 return; 1757
1758 1758 if (v) {
1759 l = o[p + '-left' + s]; 1759 v = v.replace(/_MCE_SEMI_/g, ';'); // Restore entities
1760 if (b != l) 1760 v = v.replace(/url\([^\)]+\)/g, function(v) {ur.push(v);return 'url(' + ur.length + ')';});
1761 return; 1761 v = v.split(':');
1762 1762 sv = tinymce.trim(v[1]);
1763 // Compress 1763 sv = sv.replace(/url\(([^\)]+)\)/g, function(a, b) {return ur[parseInt(b) - 1];});
1764 o[ot] = l; 1764
1765 delete o[p + '-top' + s]; 1765 sv = sv.replace(/rgb\([^\)]+\)/g, function(v) {
1766 delete o[p + '-right' + s]; 1766 return t.toHex(v);
1767 delete o[p + '-bottom' + s]; 1767 });
1768 delete o[p + '-left' + s]; 1768
1769 }; 1769 if (s.url_converter) {
1770 1770 sv = sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g, function(x, c) {
1771 function compress2(ta, a, b, c) { 1771 return 'url(' + s.url_converter.call(s.url_converter_scope || t, t.decode(c), 'style', null) + ')';
1772 var t; 1772 });
1773 1773 }
1774 t = o[a]; 1774
1775 if (!t) 1775 o[tinymce.trim(v[0]).toLowerCase()] = sv;
1776 return; 1776 }
1777 1777 });
1778 t = o[b]; 1778
1779 if (!t) 1779 compress("border", "", "border");
1780 return; 1780 compress("border", "-width", "border-width");
1781 1781 compress("border", "-color", "border-color");
1782 t = o[c]; 1782 compress("border", "-style", "border-style");
1783 if (!t) 1783 compress("padding", "", "padding");
1784 return; 1784 compress("margin", "", "margin");
1785 1785 compress2('border', 'border-width', 'border-style', 'border-color');
1786 // Compress 1786
1787 o[ta] = o[a] + ' ' + o[b] + ' ' + o[c]; 1787 if (isIE) {
1788 delete o[a]; 1788 // Remove pointless border
1789 delete o[b]; 1789 if (o.border == 'medium none')
1790 delete o[c]; 1790 o.border = '';
1791 }; 1791 }
1792 1792
1793 st = st.replace(/&(#?[a-z0-9]+);/g, '&$1_MCE_SEMI_'); // Protect entities 1793 return o;
1794 1794 },
1795 each(st.split(';'), function(v) { 1795
1796 var sv, ur = []; 1796 serializeStyle : function(o) {
1797 1797 var s = '';
1798 if (v) { 1798
1799 v = v.replace(/_MCE_SEMI_/g, ';'); // Restore entities 1799 each(o, function(v, k) {
1800 v = v.replace(/url\([^\)]+\)/g, function(v) {ur.push(v);return 'url(' + ur.length + ')';}); 1800 if (k && v) {
1801 v = v.split(':'); 1801 if (tinymce.isGecko && k.indexOf('-moz-') === 0)
1802 sv = tinymce.trim(v[1]); 1802 return;
1803 sv = sv.replace(/url\(([^\)]+)\)/g, function(a, b) {return ur[parseInt(b) - 1];}); 1803
1804 1804 switch (k) {
1805 sv = sv.replace(/rgb\([^\)]+\)/g, function(v) { 1805 case 'color':
1806 return t.toHex(v); 1806 case 'background-color':
1807 }); 1807 v = v.toLowerCase();
1808 1808 break;
1809 if (s.url_converter) { 1809 }
1810 sv = sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g, function(x, c) { 1810
1811 return 'url(' + s.url_converter.call(s.url_converter_scope || t, t.decode(c), 'style', null) + ')'; 1811 s += (s ? ' ' : '') + k + ': ' + v + ';';
1812 }); 1812 }
1813 } 1813 });
1814 1814
1815 o[tinymce.trim(v[0]).toLowerCase()] = sv; 1815 return s;
1816 } 1816 },
1817 }); 1817
1818 1818 loadCSS : function(u) {
1819 compress("border", "", "border"); 1819 var t = this, d = t.doc, head;
1820 compress("border", "-width", "border-width"); 1820
1821 compress("border", "-color", "border-color"); 1821 if (!u)
1822 compress("border", "-style", "border-style"); 1822 u = '';
1823 compress("padding", "", "padding"); 1823
1824 compress("margin", "", "margin"); 1824 head = t.select('head')[0];
1825 compress2('border', 'border-width', 'border-style', 'border-color'); 1825
1826 1826 each(u.split(','), function(u) {
1827 if (isIE) { 1827 var link;
1828 // Remove pointless border 1828
1829 if (o.border == 'medium none') 1829 if (t.files[u])
1830 o.border = ''; 1830 return;
1831 } 1831
1832 1832 t.files[u] = true;
1833 return o; 1833 link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});
1834 }, 1834
1835 1835 // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug
1836 serializeStyle : function(o) { 1836 // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading
1837 var s = ''; 1837 // It's ugly but it seems to work fine.
1838 1838 if (isIE && d.documentMode) {
1839 each(o, function(v, k) { 1839 link.onload = function() {
1840 if (k && v) { 1840 d.recalc();
1841 if (tinymce.isGecko && k.indexOf('-moz-') === 0) 1841 link.onload = null;
1842 return; 1842 };
1843 1843 }
1844 switch (k) { 1844
1845 case 'color': 1845 head.appendChild(link);
1846 case 'background-color': 1846 });
1847 v = v.toLowerCase(); 1847 },
1848 break; 1848
1849 } 1849 addClass : function(e, c) {
1850 1850 return this.run(e, function(e) {
1851 s += (s ? ' ' : '') + k + ': ' + v + ';'; 1851 var o;
1852 } 1852
1853 }); 1853 if (!c)
1854 1854 return 0;
1855 return s; 1855
1856 }, 1856 if (this.hasClass(e, c))
1857 1857 return e.className;
1858 loadCSS : function(u) { 1858
1859 var t = this, d = t.doc; 1859 o = this.removeClass(e, c);
1860 1860
1861 if (!u) 1861 return e.className = (o != '' ? (o + ' ') : '') + c;
1862 u = ''; 1862 });
1863 1863 },
1864 each(u.split(','), function(u) { 1864
1865 if (t.files[u]) 1865 removeClass : function(e, c) {
1866 return; 1866 var t = this, re;
1867 1867
1868 t.files[u] = true; 1868 return t.run(e, function(e) {
1869 t.add(t.select('head')[0], 'link', {rel : 'stylesheet', href : tinymce._addVer(u)}); 1869 var v;
1870 }); 1870
1871 }, 1871 if (t.hasClass(e, c)) {
1872 1872 if (!re)
1873 // #if !jquery 1873 re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");
1874 1874
1875 addClass : function(e, c) { 1875 v = e.className.replace(re, ' ');
1876 return this.run(e, function(e) { 1876
1877 var o; 1877 return e.className = tinymce.trim(v != ' ' ? v : '');
1878 1878 }
1879 if (!c) 1879
1880 return 0; 1880 return e.className;
1881 1881 });
1882 if (this.hasClass(e, c)) 1882 },
1883 return e.className; 1883
1884 1884 hasClass : function(n, c) {
1885 o = this.removeClass(e, c); 1885 n = this.get(n);
1886 1886
1887 return e.className = (o != '' ? (o + ' ') : '') + c; 1887 if (!n || !c)
1888 }); 1888 return false;
1889 }, 1889
1890 1890 return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;
1891 removeClass : function(e, c) { 1891 },
1892 var t = this, re; 1892
1893 1893 show : function(e) {
1894 return t.run(e, function(e) { 1894 return this.setStyle(e, 'display', 'block');
1895 var v; 1895 },
1896 1896
1897 if (t.hasClass(e, c)) { 1897 hide : function(e) {
1898 if (!re) 1898 return this.setStyle(e, 'display', 'none');
1899 re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g"); 1899 },
1900 1900
1901 v = e.className.replace(re, ' '); 1901 isHidden : function(e) {
1902 1902 e = this.get(e);
1903 return e.className = tinymce.trim(v != ' ' ? v : ''); 1903
1904 } 1904 return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';
1905 1905 },
1906 return e.className; 1906
1907 }); 1907 uniqueId : function(p) {
1908 }, 1908 return (!p ? 'mce_' : p) + (this.counter++);
1909 1909 },
1910 hasClass : function(n, c) { 1910
1911 n = this.get(n); 1911 setHTML : function(e, h) {
1912 1912 var t = this;
1913 if (!n || !c) 1913
1914 return false; 1914 return this.run(e, function(e) {
1915 1915 var x, i, nl, n, p, x;
1916 return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1; 1916
1917 }, 1917 h = t.processHTML(h);
1918 1918
1919 show : function(e) { 1919 if (isIE) {
1920 return this.setStyle(e, 'display', 'block'); 1920 function set() {
1921 }, 1921 try {
1922 1922 // IE will remove comments from the beginning
1923 hide : function(e) { 1923 // unless you padd the contents with something
1924 return this.setStyle(e, 'display', 'none'); 1924 e.innerHTML = '<br />' + h;
1925 }, 1925 e.removeChild(e.firstChild);
1926 1926 } catch (ex) {
1927 isHidden : function(e) { 1927 // IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p
1928 e = this.get(e); 1928 // This seems to fix this problem
1929 1929
1930 return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none'; 1930 // Remove all child nodes
1931 }, 1931 while (e.firstChild)
1932 1932 e.firstChild.removeNode();
1933 // #endif 1933
1934 1934 // Create new div with HTML contents and a BR infront to keep comments
1935 uniqueId : function(p) { 1935 x = t.create('div');
1936 return (!p ? 'mce_' : p) + (this.counter++); 1936 x.innerHTML = '<br />' + h;
1937 }, 1937
1938 1938 // Add all children from div to target
1939 setHTML : function(e, h) { 1939 each (x.childNodes, function(n, i) {
1940 var t = this; 1940 // Skip br element
1941 1941 if (i)
1942 return this.run(e, function(e) { 1942 e.appendChild(n);
1943 var x, i, nl, n, p, x; 1943 });
1944 1944 }
1945 h = t.processHTML(h); 1945 };
1946 1946
1947 if (isIE) { 1947 // IE has a serious bug when it comes to paragraphs it can produce an invalid
1948 function set() { 1948 // DOM tree if contents like this <p><ul><li>Item 1</li></ul></p> is inserted
1949 try { 1949 // It seems to be that IE doesn't like a root block element placed inside another root block element
1950 // IE will remove comments from the beginning 1950 if (t.settings.fix_ie_paragraphs)
1951 // unless you padd the contents with something 1951 h = h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi, '<p$1 mce_keep="true">&nbsp;</p>');
1952 e.innerHTML = '<br />' + h; 1952
1953 e.removeChild(e.firstChild); 1953 set();
1954 } catch (ex) { 1954
1955 // IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p 1955 if (t.settings.fix_ie_paragraphs) {
1956 // This seems to fix this problem 1956 // Check for odd paragraphs this is a sign of a broken DOM
1957 1957 nl = e.getElementsByTagName("p");
1958 // Remove all child nodes 1958 for (i = nl.length - 1, x = 0; i >= 0; i--) {
1959 while (e.firstChild) 1959 n = nl[i];
1960 e.firstChild.removeNode(); 1960
1961 1961 if (!n.hasChildNodes()) {
1962 // Create new div with HTML contents and a BR infront to keep comments 1962 if (!n.mce_keep) {
1963 x = t.create('div'); 1963 x = 1; // Is broken
1964 x.innerHTML = '<br />' + h; 1964 break;
1965 1965 }
1966 // Add all children from div to target 1966
1967 each (x.childNodes, function(n, i) { 1967 n.removeAttribute('mce_keep');
1968 // Skip br element 1968 }
1969 if (i) 1969 }
1970 e.appendChild(n); 1970 }
1971 }); 1971
1972 } 1972 // Time to fix the madness IE left us
1973 }; 1973 if (x) {
1974 1974 // So if we replace the p elements with divs and mark them and then replace them back to paragraphs
1975 // IE has a serious bug when it comes to paragraphs it can produce an invalid 1975 // after we use innerHTML we can fix the DOM tree
1976 // DOM tree if contents like this <p><ul><li>Item 1</li></ul></p> is inserted 1976 h = h.replace(/<p ([^>]+)>|<p>/g, '<div $1 mce_tmp="1">');
1977 // It seems to be that IE doesn't like a root block element placed inside another root block element 1977 h = h.replace(/<\/p>/g, '</div>');
1978 if (t.settings.fix_ie_paragraphs) 1978
1979 h = h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); 1979 // Set the new HTML with DIVs
1980 1980 set();
1981 set(); 1981
1982 1982 // Replace all DIV elements with he mce_tmp attibute back to paragraphs
1983 if (t.settings.fix_ie_paragraphs) { 1983 // This is needed since IE has a annoying bug see above for details
1984 // Check for odd paragraphs this is a sign of a broken DOM 1984 // This is a slow process but it has to be done. :(
1985 nl = e.getElementsByTagName("p"); 1985 if (t.settings.fix_ie_paragraphs) {
1986 for (i = nl.length - 1, x = 0; i >= 0; i--) { 1986 nl = e.getElementsByTagName("DIV");
1987 n = nl[i]; 1987 for (i = nl.length - 1; i >= 0; i--) {
1988 1988 n = nl[i];
1989 if (!n.hasChildNodes()) { 1989
1990 if (!n.mce_keep) { 1990 // Is it a temp div
1991 x = 1; // Is broken 1991 if (n.mce_tmp) {
1992 break; 1992 // Create new paragraph
1993 } 1993 p = t.doc.createElement('p');
1994 1994
1995 n.removeAttribute('mce_keep'); 1995 // Copy all attributes
1996 } 1996 n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi, function(a, b) {
1997 } 1997 var v;
1998 } 1998
1999 1999 if (b !== 'mce_tmp') {
2000 // Time to fix the madness IE left us 2000 v = n.getAttribute(b);
2001 if (x) { 2001
2002 // So if we replace the p elements with divs and mark them and then replace them back to paragraphs 2002 if (!v && b === 'class')
2003 // after we use innerHTML we can fix the DOM tree 2003 v = n.className;
2004 h = h.replace(/<p ([^>]+)>|<p>/g, '<div $1 mce_tmp="1">'); 2004
2005 h = h.replace(/<\/p>/g, '</div>'); 2005 p.setAttribute(b, v);
2006 2006 }
2007 // Set the new HTML with DIVs 2007 });
2008 set(); 2008
2009 2009 // Append all children to new paragraph
2010 // Replace all DIV elements with he mce_tmp attibute back to paragraphs 2010 for (x = 0; x<n.childNodes.length; x++)
2011 // This is needed since IE has a annoying bug see above for details 2011 p.appendChild(n.childNodes[x].cloneNode(true));
2012 // This is a slow process but it has to be done. :( 2012
2013 if (t.settings.fix_ie_paragraphs) { 2013 // Replace div with new paragraph
2014 nl = e.getElementsByTagName("DIV"); 2014 n.swapNode(p);
2015 for (i = nl.length - 1; i >= 0; i--) { 2015 }
2016 n = nl[i]; 2016 }
2017 2017 }
2018 // Is it a temp div 2018 }
2019 if (n.mce_tmp) { 2019 } else
2020 // Create new paragraph 2020 e.innerHTML = h;
2021 p = t.doc.createElement('p'); 2021
2022 2022 return h;
2023 // Copy all attributes 2023 });
2024 n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi, function(a, b) { 2024 },
2025 var v; 2025
2026 2026 processHTML : function(h) {
2027 if (b !== 'mce_tmp') { 2027 var t = this, s = t.settings;
2028 v = n.getAttribute(b); 2028
2029 2029 if (!s.process_html)
2030 if (!v && b === 'class') 2030 return h;
2031 v = n.className; 2031
2032 2032 // Convert strong and em to b and i in FF since it can't handle them
2033 p.setAttribute(b, v); 2033 if (tinymce.isGecko) {
2034 } 2034 h = h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi, '<$1b$2>');
2035 }); 2035 h = h.replace(/<(\/?)em>|<em( [^>]+)>/gi, '<$1i$2>');
2036 2036 } else if (isIE) {
2037 // Append all children to new paragraph 2037 h = h.replace(/&apos;/g, '&#39;'); // IE can't handle apos
2038 for (x = 0; x<n.childNodes.length; x++) 2038 h = h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi, ''); // IE doesn't handle default values correct
2039 p.appendChild(n.childNodes[x].cloneNode(true)); 2039 }
2040 2040
2041 // Replace div with new paragraph 2041 // Fix some issues
2042 n.swapNode(p); 2042 h = h.replace(/<a( )([^>]+)\/>|<a\/>/gi, '<a$1$2></a>'); // Force open
2043 } 2043
2044 } 2044 // Store away src and href in mce_src and mce_href since browsers mess them up
2045 } 2045 if (s.keep_values) {
2046 } 2046 // Wrap scripts and styles in comments for serialization purposes
2047 } else 2047 if (/<script|noscript|style/i.test(h)) {
2048 e.innerHTML = h; 2048 function trim(s) {
2049 2049 // Remove prefix and suffix code for element
2050 return h; 2050 s = s.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n');
2051 }); 2051 s = s.replace(/^[\r\n]*|[\r\n]*$/g, '');
2052 }, 2052 s = s.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g, '');
2053 2053 s = s.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g, '');
2054 processHTML : function(h) { 2054
2055 var t = this, s = t.settings; 2055 return s;
2056 2056 };
2057 if (!s.process_html) 2057
2058 return h; 2058 // Wrap the script contents in CDATA and keep them from executing
2059 2059 h = h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/gi, function(v, attribs, text) {
2060 // Convert strong and em to b and i in FF since it can't handle them 2060 // Force type attribute
2061 if (tinymce.isGecko) { 2061 if (!attribs)
2062 h = h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi, '<$1b$2>'); 2062 attribs = ' type="text/javascript"';
2063 h = h.replace(/<(\/?)em>|<em( [^>]+)>/gi, '<$1i$2>'); 2063
2064 } else if (isIE) { 2064 // Convert the src attribute of the scripts
2065 h = h.replace(/&apos;/g, '&#39;'); // IE can't handle apos 2065 attribs = attribs.replace(/src=\"([^\"]+)\"?/i, function(a, url) {
2066 h = h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi, ''); // IE doesn't handle default values correct 2066 if (s.url_converter)
2067 } 2067 url = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(url), 'src', 'script'));
2068 2068
2069 // Fix some issues 2069 return 'mce_src="' + url + '"';
2070 h = h.replace(/<a( )([^>]+)\/>|<a\/>/gi, '<a$1$2></a>'); // Force open 2070 });
2071 2071
2072 // Store away src and href in mce_src and mce_href since browsers mess them up 2072 // Wrap text contents
2073 if (s.keep_values) { 2073 if (tinymce.trim(text))
2074 // Wrap scripts and styles in comments for serialization purposes 2074 text = '<!--\n' + trim(text) + '\n// -->';
2075 if (/<script|style/.test(h)) { 2075
2076 function trim(s) { 2076 return '<mce:script' + attribs + '>' + text + '</mce:script>';
2077 // Remove prefix and suffix code for element 2077 });
2078 s = s.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n'); 2078
2079 s = s.replace(/^[\r\n]*|[\r\n]*$/g, ''); 2079 // Wrap style elements
2080 s = s.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g, ''); 2080 h = h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/gi, function(v, attribs, text) {
2081 s = s.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g, ''); 2081 // Wrap text contents
2082 2082 if (text)
2083 return s; 2083 text = '<!--\n' + trim(text) + '\n-->';
2084 }; 2084
2085 2085 return '<mce:style' + attribs + '>' + text + '</mce:style><style ' + attribs + ' mce_bogus="1">' + text + '</style>';
2086 // Preserve script elements 2086 });
2087 h = h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/g, function(v, a, b) { 2087
2088 // Remove prefix and suffix code for script element 2088 // Wrap noscript elements
2089 b = trim(b); 2089 h = h.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g, function(v, attribs, text) {
2090 2090 return '<mce:noscript' + attribs + '><!--' + t.encode(text).replace(/--/g, '&#45;&#45;') + '--></mce:noscript>';
2091 // Force type attribute 2091 });
2092 if (!a) 2092 }
2093 a = ' type="text/javascript"'; 2093
2094 2094 h = h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g, '<!--[CDATA[$1]]-->');
2095 // Wrap contents in a comment 2095
2096 if (b) 2096 // Process all tags with src, href or style
2097 b = '<!--\n' + b + '\n// -->'; 2097 h = h.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi, function(a, n) {
2098 2098 function handle(m, b, c) {
2099 // Output fake element 2099 var u = c;
2100 return '<mce:script' + a + '>' + b + '</mce:script>'; 2100
2101 }); 2101 // Tag already got a mce_ version
2102 2102 if (a.indexOf('mce_' + b) != -1)
2103 // Preserve style elements 2103 return m;
2104 h = h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/g, function(v, a, b) { 2104
2105 b = trim(b); 2105 if (b == 'style') {
2106 return '<mce:style' + a + '><!--\n' + b + '\n--></mce:style><style' + a + ' mce_bogus="1">' + b + '</style>'; 2106 // No mce_style for elements with these since they might get resized by the user
2107 }); 2107 if (t._isRes(c))
2108 } 2108 return m;
2109 2109
2110 h = h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g, '<!--[CDATA[$1]]-->'); 2110 if (s.hex_colors) {
2111 2111 u = u.replace(/rgb\([^\)]+\)/g, function(v) {
2112 // Process all tags with src, href or style 2112 return t.toHex(v);
2113 h = h.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi, function(a, n) { 2113 });
2114 function handle(m, b, c) { 2114 }
2115 var u = c; 2115
2116 2116 if (s.url_converter) {
2117 // Tag already got a mce_ version 2117 u = u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g, function(x, c) {
2118 if (a.indexOf('mce_' + b) != -1) 2118 return 'url(' + t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n)) + ')';
2119 return m; 2119 });
2120 2120 }
2121 if (b == 'style') { 2121 } else if (b != 'coords' && b != 'shape') {
2122 // Why did I need this one? 2122 if (s.url_converter)
2123 //if (isIE) 2123 u = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n));
2124 // u = t.serializeStyle(t.parseStyle(u)); 2124 }
2125 2125
2126 // No mce_style for elements with these since they might get resized by the user 2126 return ' ' + b + '="' + c + '" mce_' + b + '="' + u + '"';
2127 if (t._isRes(c)) 2127 };
2128 return m; 2128
2129 2129 a = a.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi, handle); // W3C
2130 if (s.hex_colors) { 2130 a = a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi, handle); // W3C
2131 u = u.replace(/rgb\([^\)]+\)/g, function(v) { 2131
2132 return t.toHex(v); 2132 return a.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi, handle); // IE
2133 }); 2133 });
2134 } 2134 }
2135 2135
2136 if (s.url_converter) { 2136 return h;
2137 u = u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g, function(x, c) { 2137 },
2138 return 'url(' + t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n)) + ')'; 2138
2139 }); 2139 getOuterHTML : function(e) {
2140 } 2140 var d;
2141 } else if (b != 'coords' && b != 'shape') { 2141
2142 if (s.url_converter) 2142 e = this.get(e);
2143 u = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(c), b, n)); 2143
2144 } 2144 if (!e)
2145 2145 return null;
2146 return ' ' + b + '="' + c + '" mce_' + b + '="' + u + '"'; 2146
2147 }; 2147 if (e.outerHTML !== undefined)
2148 2148 return e.outerHTML;
2149 a = a.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi, handle); // W3C 2149
2150 a = a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi, handle); // W3C 2150 d = (e.ownerDocument || this.doc).createElement("body");
2151 2151 d.appendChild(e.cloneNode(true));
2152 return a.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi, handle); // IE 2152
2153 }); 2153 return d.innerHTML;
2154 } 2154 },
2155 2155
2156 return h; 2156 setOuterHTML : function(e, h, d) {
2157 }, 2157 var t = this;
2158 2158
2159 getOuterHTML : function(e) { 2159 function setHTML(e, h, d) {
2160 var d; 2160 var n, tp;
2161 2161
2162 e = this.get(e); 2162 tp = d.createElement("body");
2163 2163 tp.innerHTML = h;
2164 if (!e) 2164
2165 return null; 2165 n = tp.lastChild;
2166 2166 while (n) {
2167 if (isIE) 2167 t.insertAfter(n.cloneNode(true), e);
2168 return e.outerHTML; 2168 n = n.previousSibling;
2169 2169 }
2170 d = (e.ownerDocument || this.doc).createElement("body"); 2170
2171 d.appendChild(e.cloneNode(true)); 2171 t.remove(e);
2172 2172 };
2173 return d.innerHTML; 2173
2174 }, 2174 return this.run(e, function(e) {
2175 2175 e = t.get(e);
2176 setOuterHTML : function(e, h, d) { 2176
2177 var t = this; 2177 // Only set HTML on elements
2178 2178 if (e.nodeType == 1) {
2179 return this.run(e, function(e) { 2179 d = d || e.ownerDocument || t.doc;
2180 var n, tp; 2180
2181 2181 if (isIE) {
2182 e = t.get(e); 2182 try {
2183 d = d || e.ownerDocument || t.doc; 2183 // Try outerHTML for IE it sometimes produces an unknown runtime error
2184 2184 if (isIE && e.nodeType == 1)
2185 if (isIE && e.nodeType == 1) 2185 e.outerHTML = h;
2186 e.outerHTML = h; 2186 else
2187 else { 2187 setHTML(e, h, d);
2188 tp = d.createElement("body"); 2188 } catch (ex) {
2189 tp.innerHTML = h; 2189 // Fix for unknown runtime error
2190 2190 setHTML(e, h, d);
2191 n = tp.lastChild; 2191 }
2192 while (n) { 2192 } else
2193 t.insertAfter(n.cloneNode(true), e); 2193 setHTML(e, h, d);
2194 n = n.previousSibling; 2194 }
2195 } 2195 });
2196 2196 },
2197 t.remove(e); 2197
2198 } 2198 decode : function(s) {
2199 }); 2199 var e, n, v;
2200 }, 2200
2201 2201 // Look for entities to decode
2202 decode : function(s) { 2202 if (/&[^;]+;/.test(s)) {
2203 var e, n, v; 2203 // Decode the entities using a div element not super efficient but less code
2204 2204 e = this.doc.createElement("div");
2205 // Look for entities to decode 2205 e.innerHTML = s;
2206 if (/&[^;]+;/.test(s)) { 2206 n = e.firstChild;
2207 // Decode the entities using a div element not super efficient but less code 2207 v = '';
2208 e = this.doc.createElement("div"); 2208
2209 e.innerHTML = s; 2209 if (n) {
2210 n = e.firstChild; 2210 do {
2211 v = ''; 2211 v += n.nodeValue;
2212 2212 } while (n.nextSibling);
2213 if (n) { 2213 }
2214 do { 2214
2215 v += n.nodeValue; 2215 return v || s;
2216 } while (n.nextSibling); 2216 }
2217 } 2217
2218 2218 return s;
2219 return v || s; 2219 },
2220 } 2220
2221 2221 encode : function(s) {
2222 return s; 2222 return s ? ('' + s).replace(/[<>&\"]/g, function (c, b) {
2223 }, 2223 switch (c) {
2224 2224 case '&':
2225 encode : function(s) { 2225 return '&amp;';
2226 return s ? ('' + s).replace(/[<>&\"]/g, function (c, b) { 2226
2227 switch (c) { 2227 case '"':
2228 case '&': 2228 return '&quot;';
2229 return '&amp;'; 2229
2230 2230 case '<':
2231 case '"': 2231 return '&lt;';
2232 return '&quot;'; 2232
2233 2233 case '>':
2234 case '<': 2234 return '&gt;';
2235 return '&lt;'; 2235 }
2236 2236
2237 case '>': 2237 return c;
2238 return '&gt;'; 2238 }) : s;
2239 } 2239 },
2240 2240
2241 return c; 2241 insertAfter : function(n, r) {
2242 }) : s; 2242 var t = this;
2243 }, 2243
2244 2244 r = t.get(r);
2245 // #if !jquery 2245
2246 2246 return this.run(n, function(n) {
2247 insertAfter : function(n, r) { 2247 var p, ns;
2248 var t = this; 2248
2249 2249 p = r.parentNode;
2250 r = t.get(r); 2250 ns = r.nextSibling;
2251 2251
2252 return this.run(n, function(n) { 2252 if (ns)
2253 var p, ns; 2253 p.insertBefore(n, ns);
2254 2254 else
2255 p = r.parentNode; 2255 p.appendChild(n);
2256 ns = r.nextSibling; 2256
2257 2257 return n;
2258 if (ns) 2258 });
2259 p.insertBefore(n, ns); 2259 },
2260 else 2260
2261 p.appendChild(n); 2261 isBlock : function(n) {
2262 2262 if (n.nodeType && n.nodeType !== 1)
2263 return n; 2263 return false;
2264 }); 2264
2265 }, 2265 n = n.nodeName || n;
2266 2266
2267 // #endif 2267 return /^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TR|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);
2268 2268 },
2269 isBlock : function(n) { 2269
2270 if (n.nodeType && n.nodeType !== 1) 2270 replace : function(n, o, k) {
2271 return false; 2271 var t = this;
2272 2272
2273 n = n.nodeName || n; 2273 if (is(o, 'array'))
2274 2274 n = n.cloneNode(true);
2275 return /^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n); 2275
2276 }, 2276 return t.run(o, function(o) {
2277 2277 if (k) {
2278 // #if !jquery 2278 each(o.childNodes, function(c) {
2279 2279 n.appendChild(c.cloneNode(true));
2280 replace : function(n, o, k) { 2280 });
2281 if (is(o, 'array')) 2281 }
2282 n = n.cloneNode(true); 2282
2283 2283 // Fix IE psuedo leak for elements since replacing elements if fairly common
2284 return this.run(o, function(o) { 2284 // Will break parentNode for some unknown reason
2285 if (k) { 2285 if (t.fixPsuedoLeaks && o.nodeType === 1) {
2286 each(o.childNodes, function(c) { 2286 o.parentNode.insertBefore(n, o);
2287 n.appendChild(c.cloneNode(true)); 2287 t.remove(o);
2288 }); 2288 return n;
2289 } 2289 }
2290 2290
2291 // Fix IE psuedo leak for elements since replacing elements if fairly common 2291 return o.parentNode.replaceChild(n, o);
2292 // Will break parentNode for some unknown reason 2292 });
2293 /* if (isIE && o.nodeType === 1) { 2293 },
2294 o.parentNode.insertBefore(n, o); 2294
2295 o.outerHTML = ''; 2295 findCommonAncestor : function(a, b) {
2296 return n; 2296 var ps = a, pe;
2297 }*/ 2297
2298 2298 while (ps) {
2299 return o.parentNode.replaceChild(n, o); 2299 pe = b;
2300 }); 2300
2301 }, 2301 while (pe && ps != pe)
2302 2302 pe = pe.parentNode;
2303 // #endif 2303
2304 2304 if (ps == pe)
2305 toHex : function(s) { 2305 break;
2306 var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s); 2306
2307 2307 ps = ps.parentNode;
2308 function hex(s) { 2308 }
2309 s = parseInt(s).toString(16); 2309
2310 2310 if (!ps && a.ownerDocument)
2311 return s.length > 1 ? s : '0' + s; // 0 -> 00 2311 return a.ownerDocument.documentElement;
2312 }; 2312
2313 2313 return ps;
2314 if (c) { 2314 },
2315 s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]); 2315
2316 2316 toHex : function(s) {
2317 return s; 2317 var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);
2318 } 2318
2319 2319 function hex(s) {
2320 return s; 2320 s = parseInt(s).toString(16);
2321 }, 2321
2322 2322 return s.length > 1 ? s : '0' + s; // 0 -> 00
2323 getClasses : function() { 2323 };
2324 var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov; 2324
2325 2325 if (c) {
2326 if (t.classes) 2326 s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);
2327 return t.classes; 2327
2328 2328 return s;
2329 function addClasses(s) { 2329 }
2330 // IE style imports 2330
2331 each(s.imports, function(r) { 2331 return s;
2332 addClasses(r); 2332 },
2333 }); 2333
2334 2334 getClasses : function() {
2335 each(s.cssRules || s.rules, function(r) { 2335 var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;
2336 // Real type or fake it on IE 2336
2337 switch (r.type || 1) { 2337 if (t.classes)
2338 // Rule 2338 return t.classes;
2339 case 1: 2339
2340 if (r.selectorText) { 2340 function addClasses(s) {
2341 each(r.selectorText.split(','), function(v) { 2341 // IE style imports
2342 v = v.replace(/^\s*|\s*$|^\s\./g, ""); 2342 each(s.imports, function(r) {
2343 2343 addClasses(r);
2344 // Is internal or it doesn't contain a class 2344 });
2345 if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v)) 2345
2346 return; 2346 each(s.cssRules || s.rules, function(r) {
2347 2347 // Real type or fake it on IE
2348 // Remove everything but class name 2348 switch (r.type || 1) {
2349 ov = v; 2349 // Rule
2350 v = v.replace(/.*\.([a-z0-9_\-]+).*/i, '$1'); 2350 case 1:
2351 2351 if (r.selectorText) {
2352 // Filter classes 2352 each(r.selectorText.split(','), function(v) {
2353 if (f && !(v = f(v, ov))) 2353 v = v.replace(/^\s*|\s*$|^\s\./g, "");
2354 return; 2354
2355 2355 // Is internal or it doesn't contain a class
2356 if (!lo[v]) { 2356 if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))
2357 cl.push({'class' : v}); 2357 return;
2358 lo[v] = 1; 2358
2359 } 2359 // Remove everything but class name
2360 }); 2360 ov = v;
2361 } 2361 v = v.replace(/.*\.([a-z0-9_\-]+).*/i, '$1');
2362 break; 2362
2363 2363 // Filter classes
2364 // Import 2364 if (f && !(v = f(v, ov)))
2365 case 3: 2365 return;
2366 addClasses(r.styleSheet); 2366
2367 break; 2367 if (!lo[v]) {
2368 } 2368 cl.push({'class' : v});
2369 }); 2369 lo[v] = 1;
2370 }; 2370 }
2371 2371 });
2372 try { 2372 }
2373 each(t.doc.styleSheets, addClasses); 2373 break;
2374 } catch (ex) { 2374
2375 // Ignore 2375 // Import
2376 } 2376 case 3:
2377 2377 addClasses(r.styleSheet);
2378 if (cl.length > 0) 2378 break;
2379 t.classes = cl; 2379 }
2380 2380 });
2381 return cl; 2381 };
2382 }, 2382
2383 2383 try {
2384 run : function(e, f, s) { 2384 each(t.doc.styleSheets, addClasses);
2385 var t = this, o; 2385 } catch (ex) {
2386 2386 // Ignore
2387 if (t.doc && typeof(e) === 'string') 2387 }
2388 e = t.get(e); 2388
2389 2389 if (cl.length > 0)
2390 if (!e) 2390 t.classes = cl;
2391 return false; 2391
2392 2392 return cl;
2393 s = s || this; 2393 },
2394 if (!e.nodeType && (e.length || e.length === 0)) { 2394
2395 o = []; 2395 run : function(e, f, s) {
2396 2396 var t = this, o;
2397 each(e, function(e, i) { 2397
2398 if (e) { 2398 if (t.doc && typeof(e) === 'string')
2399 if (typeof(e) == 'string') 2399 e = t.get(e);
2400 e = t.doc.getElementById(e); 2400
2401 2401 if (!e)
2402 o.push(f.call(s, e, i)); 2402 return false;
2403 } 2403
2404 }); 2404 s = s || this;
2405 2405 if (!e.nodeType && (e.length || e.length === 0)) {
2406 return o; 2406 o = [];
2407 } 2407
2408 2408 each(e, function(e, i) {
2409 return f.call(s, e); 2409 if (e) {
2410 }, 2410 if (typeof(e) == 'string')
2411 2411 e = t.doc.getElementById(e);
2412 getAttribs : function(n) { 2412
2413 var o; 2413 o.push(f.call(s, e, i));
2414 2414 }
2415 n = this.get(n); 2415 });
2416 2416
2417 if (!n) 2417 return o;
2418 return []; 2418 }
2419 2419
2420 if (isIE) { 2420 return f.call(s, e);
2421 o = []; 2421 },
2422 2422
2423 // Object will throw exception in IE 2423 getAttribs : function(n) {
2424 if (n.nodeName == 'OBJECT') 2424 var o;
2425 return n.attributes; 2425
2426 2426 n = this.get(n);
2427 // It's crazy that this is faster in IE but it's because it returns all attributes all the time 2427
2428 n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) { 2428 if (!n)
2429 o.push({specified : 1, nodeName : b}); 2429 return [];
2430 }); 2430
2431 2431 if (isIE) {
2432 return o; 2432 o = [];
2433 } 2433
2434 2434 // Object will throw exception in IE
2435 return n.attributes; 2435 if (n.nodeName == 'OBJECT')
2436 }, 2436 return n.attributes;
2437 2437
2438 destroy : function(s) { 2438 // It's crazy that this is faster in IE but it's because it returns all attributes all the time
2439 var t = this; 2439 n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) {
2440 2440 o.push({specified : 1, nodeName : b});
2441 t.win = t.doc = t.root = null; 2441 });
2442 2442
2443 // Manual destroy then remove unload handler 2443 return o;
2444 if (!s) 2444 }
2445 tinymce.removeUnload(t.destroy); 2445
2446 }, 2446 return n.attributes;
2447 2447 },
2448 _isRes : function(c) { 2448
2449 // Is live resizble element 2449 destroy : function(s) {
2450 return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c); 2450 var t = this;
2451 } 2451
2452 2452 if (t.events)
2453 /* 2453 t.events.destroy();
2454 walk : function(n, f, s) { 2454
2455 var d = this.doc, w; 2455 t.win = t.doc = t.root = t.events = null;
2456 2456
2457 if (d.createTreeWalker) { 2457 // Manual destroy then remove unload handler
2458 w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); 2458 if (!s)
2459 2459 tinymce.removeUnload(t.destroy);
2460 while ((n = w.nextNode()) != null) 2460 },
2461 f.call(s || this, n); 2461
2462 } else 2462 createRng : function() {
2463 tinymce.walk(n, f, 'childNodes', s); 2463 var d = this.doc;
2464 } 2464
2465 */ 2465 return d.createRange ? d.createRange() : new tinymce.dom.Range(this);
2466 2466 },
2467 /* 2467
2468 toRGB : function(s) { 2468 split : function(pe, e, re) {
2469 var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s); 2469 var t = this, r = t.createRng(), bef, aft, pa;
2470 2470
2471 if (c) { 2471 // W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sence
2472 // #FFF -> #FFFFFF 2472 // but we don't want that in our code since it serves no purpose
2473 if (!is(c[3])) 2473 // For example if this is chopped:
2474 c[3] = c[2] = c[1]; 2474 // <p>text 1<span><b>CHOP</b></span>text 2</p>
2475 2475 // would produce:
2476 return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")"; 2476 // <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>
2477 } 2477 // this function will then trim of empty edges and produce:
2478 2478 // <p>text 1</p><b>CHOP</b><p>text 2</p>
2479 return s; 2479 function trimEdge(n, na) {
2480 } 2480 n = n[na];
2481 */ 2481
2482 2482 if (n && n[na] && n[na].nodeType == 1 && isEmpty(n[na]))
2483 }); 2483 t.remove(n[na]);
2484 2484 };
2485 // Setup page DOM 2485
2486 tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0}); 2486 function isEmpty(n) {
2487})(); 2487 n = t.getOuterHTML(n);
2488 2488 n = n.replace(/<(img|hr|table)/gi, '-'); // Keep these convert them to - chars
2489/* file:jscripts/tiny_mce/classes/dom/Event.js */ 2489 n = n.replace(/<[^>]+>/g, ''); // Remove all tags
2490 2490
2491(function() { 2491 return n.replace(/[ \t\r\n]+|&nbsp;|&#160;/g, '') == '';
2492 // Shorten names 2492 };
2493 var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event; 2493
2494 2494 if (pe && e) {
2495 tinymce.create('static tinymce.dom.Event', { 2495 // Get before chunk
2496 inits : [], 2496 r.setStartBefore(pe);
2497 events : [], 2497 r.setEndBefore(e);
2498 2498 bef = r.extractContents();
2499 // #if !jquery 2499
2500 2500 // Get after chunk
2501 add : function(o, n, f, s) { 2501 r = t.createRng();
2502 var cb, t = this, el = t.events, r; 2502 r.setStartAfter(e);
2503 2503 r.setEndAfter(pe);
2504 // Handle array 2504 aft = r.extractContents();
2505 if (o && o instanceof Array) { 2505
2506 r = []; 2506 // Insert chunks and remove parent
2507 2507 pa = pe.parentNode;
2508 each(o, function(o) { 2508
2509 o = DOM.get(o); 2509 // Remove right side edge of the before contents
2510 r.push(t.add(o, n, f, s)); 2510 trimEdge(bef, 'lastChild');
2511 }); 2511
2512 2512 if (!isEmpty(bef))
2513 return r; 2513 pa.insertBefore(bef, pe);
2514 } 2514
2515 2515 if (re)
2516 o = DOM.get(o); 2516 pa.replaceChild(re, e);
2517 2517 else
2518 if (!o) 2518 pa.insertBefore(e, pe);
2519 return; 2519
2520 2520 // Remove left site edge of the after contents
2521 // Setup event callback 2521 trimEdge(aft, 'firstChild');
2522 cb = function(e) { 2522
2523 e = e || window.event; 2523 if (!isEmpty(aft))
2524 2524 pa.insertBefore(aft, pe);
2525 // Patch in target in IE it's W3C valid 2525
2526 if (e && !e.target && isIE) 2526 t.remove(pe);
2527 e.target = e.srcElement; 2527
2528 2528 return re || e;
2529 if (!s) 2529 }
2530 return f(e); 2530 },
2531 2531
2532 return f.call(s, e); 2532 bind : function(target, name, func, scope) {
2533 }; 2533 var t = this;
2534 2534
2535 if (n == 'unload') { 2535 if (!t.events)
2536 tinymce.unloads.unshift({func : cb}); 2536 t.events = new tinymce.dom.EventUtils();
2537 return cb; 2537
2538 } 2538 return t.events.add(target, name, func, scope || this);
2539 2539 },
2540 if (n == 'init') { 2540
2541 if (t.domLoaded) 2541 unbind : function(target, name, func) {
2542 cb(); 2542 var t = this;
2543 else 2543
2544 t.inits.push(cb); 2544 if (!t.events)
2545 2545 t.events = new tinymce.dom.EventUtils();
2546 return cb; 2546
2547 } 2547 return t.events.remove(target, name, func);
2548 2548 },
2549 // Store away listener reference 2549
2550 el.push({ 2550
2551 obj : o, 2551 _findSib : function(node, selector, name) {
2552 name : n, 2552 var t = this, f = selector;
2553 func : f, 2553
2554 cfunc : cb, 2554 if (node) {
2555 scope : s 2555 // If expression make a function of it using is
2556 }); 2556 if (is(f, 'string')) {
2557 2557 f = function(node) {
2558 t._add(o, n, cb); 2558 return t.is(node, selector);
2559 2559 };
2560 return f; 2560 }
2561 }, 2561
2562 2562 // Loop all siblings
2563 remove : function(o, n, f) { 2563 for (node = node[name]; node; node = node[name]) {
2564 var t = this, a = t.events, s = false, r; 2564 if (f(node))
2565 2565 return node;
2566 // Handle array 2566 }
2567 if (o && o instanceof Array) { 2567 }
2568 r = []; 2568
2569 2569 return null;
2570 each(o, function(o) { 2570 },
2571 o = DOM.get(o); 2571
2572 r.push(t.remove(o, n, f)); 2572 _isRes : function(c) {
2573 }); 2573 // Is live resizble element
2574 2574 return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);
2575 return r; 2575 }
2576 } 2576
2577 2577 /*
2578 o = DOM.get(o); 2578 walk : function(n, f, s) {
2579 2579 var d = this.doc, w;
2580 each(a, function(e, i) { 2580
2581 if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) { 2581 if (d.createTreeWalker) {
2582 a.splice(i, 1); 2582 w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
2583 t._remove(o, n, e.cfunc); 2583
2584 s = true; 2584 while ((n = w.nextNode()) != null)
2585 return false; 2585 f.call(s || this, n);
2586 } 2586 } else
2587 }); 2587 tinymce.walk(n, f, 'childNodes', s);
2588 2588 }
2589 return s; 2589 */
2590 }, 2590
2591 2591 /*
2592 clear : function(o) { 2592 toRGB : function(s) {
2593 var t = this, a = t.events, i, e; 2593 var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);
2594 2594
2595 if (o) { 2595 if (c) {
2596 o = DOM.get(o); 2596 // #FFF -> #FFFFFF
2597 2597 if (!is(c[3]))
2598 for (i = a.length - 1; i >= 0; i--) { 2598 c[3] = c[2] = c[1];
2599 e = a[i]; 2599
2600 2600 return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";
2601 if (e.obj === o) { 2601 }
2602 t._remove(e.obj, e.name, e.cfunc); 2602
2603 e.obj = e.cfunc = null; 2603 return s;
2604 a.splice(i, 1); 2604 }
2605 } 2605 */
2606 } 2606 });
2607 } 2607
2608 }, 2608 tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});
2609 2609})(tinymce);
2610 // #endif 2610(function(ns) {
2611 2611 // Traverse constants
2612 cancel : function(e) { 2612 var EXTRACT = 0, CLONE = 1, DELETE = 2, extend = tinymce.extend;
2613 if (!e) 2613
2614 return false; 2614 function indexOf(child, parent) {
2615 2615 var i, node;
2616 this.stop(e); 2616
2617 return this.prevent(e); 2617 if (child.parentNode != parent)
2618 }, 2618 return -1;
2619 2619
2620 stop : function(e) { 2620 for (node = parent.firstChild, i = 0; node != child; node = node.nextSibling)
2621 if (e.stopPropagation) 2621 i++;
2622 e.stopPropagation(); 2622
2623 else 2623 return i;
2624 e.cancelBubble = true; 2624 };
2625 2625
2626 return false; 2626 function nodeIndex(n) {
2627 }, 2627 var i = 0;
2628 2628
2629 prevent : function(e) { 2629 while (n.previousSibling) {
2630 if (e.preventDefault) 2630 i++;
2631 e.preventDefault(); 2631 n = n.previousSibling;
2632 else 2632 }
2633 e.returnValue = false; 2633
2634 2634 return i;
2635 return false; 2635 };
2636 }, 2636
2637 2637 function getSelectedNode(container, offset) {
2638 _unload : function() { 2638 var child;
2639 var t = Event; 2639
2640 2640 if (container.nodeType == 3 /* TEXT_NODE */)
2641 each(t.events, function(e, i) { 2641 return container;
2642 t._remove(e.obj, e.name, e.cfunc); 2642
2643 e.obj = e.cfunc = null; 2643 if (offset < 0)
2644 }); 2644 return container;
2645 2645
2646 t.events = []; 2646 child = container.firstChild;
2647 t = null; 2647 while (child != null && offset > 0) {
2648 }, 2648 --offset;
2649 2649 child = child.nextSibling;
2650 _add : function(o, n, f) { 2650 }
2651 if (o.attachEvent) 2651
2652 o.attachEvent('on' + n, f); 2652 if (child != null)
2653 else if (o.addEventListener) 2653 return child;
2654 o.addEventListener(n, f, false); 2654
2655 else 2655 return container;
2656 o['on' + n] = f; 2656 };
2657 }, 2657
2658 2658 // Range constructor
2659 _remove : function(o, n, f) { 2659 function Range(dom) {
2660 if (o) { 2660 var d = dom.doc;
2661 try { 2661
2662 if (o.detachEvent) 2662 extend(this, {
2663 o.detachEvent('on' + n, f); 2663 dom : dom,
2664 else if (o.removeEventListener) 2664
2665 o.removeEventListener(n, f, false); 2665 // Inital states
2666 else 2666 startContainer : d,
2667 o['on' + n] = null; 2667 startOffset : 0,
2668 } catch (ex) { 2668 endContainer : d,
2669 // Might fail with permission denined on IE so we just ignore that 2669 endOffset : 0,
2670 } 2670 collapsed : true,
2671 } 2671 commonAncestorContainer : d,
2672 }, 2672
2673 2673 // Range constants
2674 _pageInit : function() { 2674 START_TO_START : 0,
2675 var e = Event; 2675 START_TO_END : 1,
2676 2676 END_TO_END : 2,
2677 // Safari on Mac fires this twice 2677 END_TO_START : 3
2678 if (e.domLoaded) 2678 });
2679 return; 2679 };
2680 2680
2681 e._remove(window, 'DOMContentLoaded', e._pageInit); 2681 // Add range methods
2682 e.domLoaded = true; 2682 extend(Range.prototype, {
2683 2683 setStart : function(n, o) {
2684 each(e.inits, function(c) { 2684 this._setEndPoint(true, n, o);
2685 c(); 2685 },
2686 }); 2686
2687 2687 setEnd : function(n, o) {
2688 e.inits = []; 2688 this._setEndPoint(false, n, o);
2689 }, 2689 },
2690 2690
2691 _wait : function() { 2691 setStartBefore : function(n) {
2692 var t; 2692 this.setStart(n.parentNode, nodeIndex(n));
2693 2693 },
2694 // No need since the document is already loaded 2694
2695 if (window.tinyMCE_GZ && tinyMCE_GZ.loaded) { 2695 setStartAfter : function(n) {
2696 Event.domLoaded = 1; 2696 this.setStart(n.parentNode, nodeIndex(n) + 1);
2697 return; 2697 },
2698 } 2698
2699 2699 setEndBefore : function(n) {
2700 if (isIE && document.location.protocol != 'https:') { 2700 this.setEnd(n.parentNode, nodeIndex(n));
2701 // Fake DOMContentLoaded on IE 2701 },
2702 document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>'); 2702
2703 DOM.get("__ie_onload").onreadystatechange = function() { 2703 setEndAfter : function(n) {
2704 if (this.readyState == "complete") { 2704 this.setEnd(n.parentNode, nodeIndex(n) + 1);
2705 Event._pageInit(); 2705 },
2706 DOM.get("__ie_onload").onreadystatechange = null; // Prevent leak 2706
2707 } 2707 collapse : function(ts) {
2708 }; 2708 var t = this;
2709 } else { 2709
2710 Event._add(window, 'DOMContentLoaded', Event._pageInit, Event); 2710 if (ts) {
2711 2711 t.endContainer = t.startContainer;
2712 if (isIE || isWebKit) { 2712 t.endOffset = t.startOffset;
2713 t = setInterval(function() { 2713 } else {
2714 if (/loaded|complete/.test(document.readyState)) { 2714 t.startContainer = t.endContainer;
2715 clearInterval(t); 2715 t.startOffset = t.endOffset;
2716 Event._pageInit(); 2716 }
2717 } 2717
2718 }, 10); 2718 t.collapsed = true;
2719 } 2719 },
2720 } 2720
2721 } 2721 selectNode : function(n) {
2722 2722 this.setStartBefore(n);
2723 }); 2723 this.setEndAfter(n);
2724 2724 },
2725 // Shorten name 2725
2726 Event = tinymce.dom.Event; 2726 selectNodeContents : function(n) {
2727 2727 this.setStart(n, 0);
2728 // Dispatch DOM content loaded event for IE and Safari 2728 this.setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);
2729 Event._wait(); 2729 },
2730 tinymce.addUnload(Event._unload); 2730
2731})(); 2731 compareBoundaryPoints : function(h, r) {
2732 2732 var t = this, sc = t.startContainer, so = t.startOffset, ec = t.endContainer, eo = t.endOffset;
2733/* file:jscripts/tiny_mce/classes/dom/Element.js */ 2733
2734 2734 // Check START_TO_START
2735(function() { 2735 if (h === 0)
2736 var each = tinymce.each; 2736 return t._compareBoundaryPoints(sc, so, sc, so);
2737 2737
2738 tinymce.create('tinymce.dom.Element', { 2738 // Check START_TO_END
2739 Element : function(id, s) { 2739 if (h === 1)
2740 var t = this, dom, el; 2740 return t._compareBoundaryPoints(sc, so, ec, eo);
2741 2741
2742 s = s || {}; 2742 // Check END_TO_END
2743 t.id = id; 2743 if (h === 2)
2744 t.dom = dom = s.dom || tinymce.DOM; 2744 return t._compareBoundaryPoints(ec, eo, ec, eo);
2745 t.settings = s; 2745
2746 2746 // Check END_TO_START
2747 // Only IE leaks DOM references, this is a lot faster 2747 if (h === 3)
2748 if (!tinymce.isIE) 2748 return t._compareBoundaryPoints(ec, eo, sc, so);
2749 el = t.dom.get(t.id); 2749 },
2750 2750
2751 each([ 2751 deleteContents : function() {
2752 'getPos', 2752 this._traverse(DELETE);
2753 'getRect', 2753 },
2754 'getParent', 2754
2755 'add', 2755 extractContents : function() {
2756 'setStyle', 2756 return this._traverse(EXTRACT);
2757 'getStyle', 2757 },
2758 'setStyles', 2758
2759 'setAttrib', 2759 cloneContents : function() {
2760 'setAttribs', 2760 return this._traverse(CLONE);
2761 'getAttrib', 2761 },
2762 'addClass', 2762
2763 'removeClass', 2763 insertNode : function(n) {
2764 'hasClass', 2764 var t = this, nn, o;
2765 'getOuterHTML', 2765
2766 'setOuterHTML', 2766 // Node is TEXT_NODE or CDATA
2767 'remove', 2767 if (n.nodeType === 3 || n.nodeType === 4) {
2768 'show', 2768 nn = t.startContainer.splitText(t.startOffset);
2769 'hide', 2769 t.startContainer.parentNode.insertBefore(n, nn);
2770 'isHidden', 2770 } else {
2771 'setHTML', 2771 // Insert element node
2772 'get' 2772 if (t.startContainer.childNodes.length > 0)
2773 ], function(k) { 2773 o = t.startContainer.childNodes[t.startOffset];
2774 t[k] = function() { 2774
2775 var a = arguments, o; 2775 t.startContainer.insertBefore(n, o);
2776 2776 }
2777 // Opera fails 2777 },
2778 if (tinymce.isOpera) { 2778
2779 a = [id]; 2779 surroundContents : function(n) {
2780 2780 var t = this, f = t.extractContents();
2781 each(arguments, function(v) { 2781
2782 a.push(v); 2782 t.insertNode(n);
2783 }); 2783 n.appendChild(f);
2784 } else 2784 t.selectNode(n);
2785 Array.prototype.unshift.call(a, el || id); 2785 },
2786 2786
2787 o = dom[k].apply(dom, a); 2787 cloneRange : function() {
2788 t.update(k); 2788 var t = this;
2789 2789
2790 return o; 2790 return extend(new Range(t.dom), {
2791 }; 2791 startContainer : t.startContainer,
2792 }); 2792 startOffset : t.startOffset,
2793 }, 2793 endContainer : t.endContainer,
2794 2794 endOffset : t.endOffset,
2795 on : function(n, f, s) { 2795 collapsed : t.collapsed,
2796 return tinymce.dom.Event.add(this.id, n, f, s); 2796 commonAncestorContainer : t.commonAncestorContainer
2797 }, 2797 });
2798 2798 },
2799 getXY : function() { 2799
2800 return { 2800/*
2801 x : parseInt(this.getStyle('left')), 2801 detach : function() {
2802 y : parseInt(this.getStyle('top')) 2802 // Not implemented
2803 }; 2803 },
2804 }, 2804*/
2805 2805 // Internal methods
2806 getSize : function() { 2806
2807 var n = this.dom.get(this.id); 2807 _isCollapsed : function() {
2808 2808 return (this.startContainer == this.endContainer && this.startOffset == this.endOffset);
2809 return { 2809 },
2810 w : parseInt(this.getStyle('width') || n.clientWidth), 2810
2811 h : parseInt(this.getStyle('height') || n.clientHeight) 2811 _compareBoundaryPoints : function (containerA, offsetA, containerB, offsetB) {
2812 }; 2812 var c, offsetC, n, cmnRoot, childA, childB;
2813 }, 2813
2814 2814 // In the first case the boundary-points have the same container. A is before B
2815 moveTo : function(x, y) { 2815 // if its offset is less than the offset of B, A is equal to B if its offset is
2816 this.setStyles({left : x, top : y}); 2816 // equal to the offset of B, and A is after B if its offset is greater than the
2817 }, 2817 // offset of B.
2818 2818 if (containerA == containerB) {
2819 moveBy : function(x, y) { 2819 if (offsetA == offsetB) {
2820 var p = this.getXY(); 2820 return 0; // equal
2821 2821 } else if (offsetA < offsetB) {
2822 this.moveTo(p.x + x, p.y + y); 2822 return -1; // before
2823 }, 2823 } else {
2824 2824 return 1; // after
2825 resizeTo : function(w, h) { 2825 }
2826 this.setStyles({width : w, height : h}); 2826 }
2827 }, 2827
2828 2828 // In the second case a child node C of the container of A is an ancestor
2829 resizeBy : function(w, h) { 2829 // container of B. In this case, A is before B if the offset of A is less than or
2830 var s = this.getSize(); 2830 // equal to the index of the child node C and A is after B otherwise.
2831 2831 c = containerB;
2832 this.resizeTo(s.w + w, s.h + h); 2832 while (c && c.parentNode != containerA) {
2833 }, 2833 c = c.parentNode;
2834 2834 }
2835 update : function(k) { 2835 if (c) {
2836 var t = this, b, dom = t.dom; 2836 offsetC = 0;
2837 2837 n = containerA.firstChild;
2838 if (tinymce.isIE6 && t.settings.blocker) { 2838
2839 k = k || ''; 2839 while (n != c && offsetC < offsetA) {
2840 2840 offsetC++;
2841 // Ignore getters 2841 n = n.nextSibling;
2842 if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0) 2842 }
2843 return; 2843
2844 2844 if (offsetA <= offsetC) {
2845 // Remove blocker on remove 2845 return -1; // before
2846 if (k == 'remove') { 2846 } else {
2847 dom.remove(t.blocker); 2847 return 1; // after
2848 return; 2848 }
2849 } 2849 }
2850 2850
2851 if (!t.blocker) { 2851 // In the third case a child node C of the container of B is an ancestor container
2852 t.blocker = dom.uniqueId(); 2852 // of A. In this case, A is before B if the index of the child node C is less than
2853 b = dom.add(t.settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'}); 2853 // the offset of B and A is after B otherwise.
2854 dom.setStyle(b, 'opacity', 0); 2854 c = containerA;
2855 } else 2855 while (c && c.parentNode != containerB) {
2856 b = dom.get(t.blocker); 2856 c = c.parentNode;
2857 2857 }
2858 dom.setStyle(b, 'left', t.getStyle('left', 1)); 2858
2859 dom.setStyle(b, 'top', t.getStyle('top', 1)); 2859 if (c) {
2860 dom.setStyle(b, 'width', t.getStyle('width', 1)); 2860 offsetC = 0;
2861 dom.setStyle(b, 'height', t.getStyle('height', 1)); 2861 n = containerB.firstChild;
2862 dom.setStyle(b, 'display', t.getStyle('display', 1)); 2862
2863 dom.setStyle(b, 'zIndex', parseInt(t.getStyle('zIndex', 1) || 0) - 1); 2863 while (n != c && offsetC < offsetB) {
2864 } 2864 offsetC++;
2865 } 2865 n = n.nextSibling;
2866 2866 }
2867 }); 2867
2868})(); 2868 if (offsetC < offsetB) {
2869 2869 return -1; // before
2870/* file:jscripts/tiny_mce/classes/dom/Selection.js */ 2870 } else {
2871 2871 return 1; // after
2872(function() { 2872 }
2873 function trimNl(s) { 2873 }
2874 return s.replace(/[\n\r]+/g, ''); 2874
2875 }; 2875 // In the fourth case, none of three other cases hold: the containers of A and B
2876 2876 // are siblings or descendants of sibling nodes. In this case, A is before B if
2877 // Shorten names 2877 // the container of A is before the container of B in a pre-order traversal of the
2878 var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each; 2878 // Ranges' context tree and A is after B otherwise.
2879 2879 cmnRoot = this.dom.findCommonAncestor(containerA, containerB);
2880 tinymce.create('tinymce.dom.Selection', { 2880 childA = containerA;
2881 Selection : function(dom, win, serializer) { 2881
2882 var t = this; 2882 while (childA && childA.parentNode != cmnRoot) {
2883 2883 childA = childA.parentNode;
2884 t.dom = dom; 2884 }
2885 t.win = win; 2885
2886 t.serializer = serializer; 2886 if (!childA) {
2887 2887 childA = cmnRoot;
2888 // Add events 2888 }
2889 each([ 2889
2890 'onBeforeSetContent', 2890 childB = containerB;
2891 'onBeforeGetContent', 2891 while (childB && childB.parentNode != cmnRoot) {
2892 'onSetContent', 2892 childB = childB.parentNode;
2893 'onGetContent' 2893 }
2894 ], function(e) { 2894
2895 t[e] = new tinymce.util.Dispatcher(t); 2895 if (!childB) {
2896 }); 2896 childB = cmnRoot;
2897 2897 }
2898 // Prevent leaks 2898
2899 tinymce.addUnload(t.destroy, t); 2899 if (childA == childB) {
2900 }, 2900 return 0; // equal
2901 2901 }
2902 getContent : function(s) { 2902
2903 var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n; 2903 n = cmnRoot.firstChild;
2904 2904 while (n) {
2905 s = s || {}; 2905 if (n == childA) {
2906 wb = wa = ''; 2906 return -1; // before
2907 s.get = true; 2907 }
2908 s.format = s.format || 'html'; 2908
2909 t.onBeforeGetContent.dispatch(t, s); 2909 if (n == childB) {
2910 2910 return 1; // after
2911 if (s.format == 'text') 2911 }
2912 return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : '')); 2912
2913 2913 n = n.nextSibling;
2914 if (r.cloneContents) { 2914 }
2915 n = r.cloneContents(); 2915 },
2916 2916
2917 if (n) 2917 _setEndPoint : function(st, n, o) {
2918 e.appendChild(n); 2918 var t = this, ec, sc;
2919 } else if (is(r.item) || is(r.htmlText)) 2919
2920 e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText; 2920 if (st) {
2921 else 2921 t.startContainer = n;
2922 e.innerHTML = r.toString(); 2922 t.startOffset = o;
2923 2923 } else {
2924 // Keep whitespace before and after 2924 t.endContainer = n;
2925 if (/^\s/.test(e.innerHTML)) 2925 t.endOffset = o;
2926 wb = ' '; 2926 }
2927 2927
2928 if (/\s+$/.test(e.innerHTML)) 2928 // If one boundary-point of a Range is set to have a root container
2929 wa = ' '; 2929 // other than the current one for the Range, the Range is collapsed to
2930 2930 // the new position. This enforces the restriction that both boundary-
2931 s.getInner = true; 2931 // points of a Range must have the same root container.
2932 2932 ec = t.endContainer;
2933 s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa; 2933 while (ec.parentNode)
2934 t.onGetContent.dispatch(t, s); 2934 ec = ec.parentNode;
2935 2935
2936 return s.content; 2936 sc = t.startContainer;
2937 }, 2937 while (sc.parentNode)
2938 2938 sc = sc.parentNode;
2939 setContent : function(h, s) { 2939
2940 var t = this, r = t.getRng(), c, d = t.win.document; 2940 if (sc != ec) {
2941 2941 t.collapse(st);
2942 s = s || {format : 'html'}; 2942 } else {
2943 s.set = true; 2943 // The start position of a Range is guaranteed to never be after the
2944 h = s.content = t.dom.processHTML(h); 2944 // end position. To enforce this restriction, if the start is set to
2945 2945 // be at a position after the end, the Range is collapsed to that
2946 // Dispatch before set content event 2946 // position.
2947 t.onBeforeSetContent.dispatch(t, s); 2947 if (t._compareBoundaryPoints(t.startContainer, t.startOffset, t.endContainer, t.endOffset) > 0)
2948 h = s.content; 2948 t.collapse(st);
2949 2949 }
2950 if (r.insertNode) { 2950
2951 // Make caret marker since insertNode places the caret in the beginning of text after insert 2951 t.collapsed = t._isCollapsed();
2952 h += '<span id="__caret">_</span>'; 2952 t.commonAncestorContainer = t.dom.findCommonAncestor(t.startContainer, t.endContainer);
2953 2953 },
2954 // Delete and insert new node 2954
2955 r.deleteContents(); 2955 // This code is heavily "inspired" by the Apache Xerces implementation. I hope they don't mind. :)
2956 r.insertNode(t.getRng().createContextualFragment(h)); 2956
2957 2957 _traverse : function(how) {
2958 // Move to caret marker 2958 var t = this, c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;
2959 c = t.dom.get('__caret'); 2959
2960 2960 if (t.startContainer == t.endContainer)
2961 // Make sure we wrap it compleatly, Opera fails with a simple select call 2961 return t._traverseSameContainer(how);
2962 r = d.createRange(); 2962
2963 r.setStartBefore(c); 2963 for (c = t.endContainer, p = c.parentNode; p != null; c = p, p = p.parentNode) {
2964 r.setEndAfter(c); 2964 if (p == t.startContainer)
2965 t.setRng(r); 2965 return t._traverseCommonStartContainer(c, how);
2966 2966
2967 // Delete the marker, and hopefully the caret gets placed in the right location 2967 ++endContainerDepth;
2968 d.execCommand('Delete', false, null); 2968 }
2969 2969
2970 // In case it's still there 2970 for (c = t.startContainer, p = c.parentNode; p != null; c = p, p = p.parentNode) {
2971 t.dom.remove('__caret'); 2971 if (p == t.endContainer)
2972 } else { 2972 return t._traverseCommonEndContainer(c, how);
2973 if (r.item) { 2973
2974 // Delete content and get caret text selection 2974 ++startContainerDepth;
2975 d.execCommand('Delete', false, null); 2975 }
2976 r = t.getRng(); 2976
2977 } 2977 depthDiff = startContainerDepth - endContainerDepth;
2978 2978
2979 r.pasteHTML(h); 2979 startNode = t.startContainer;
2980 } 2980 while (depthDiff > 0) {
2981 2981 startNode = startNode.parentNode;
2982 // Dispatch set content event 2982 depthDiff--;
2983 t.onSetContent.dispatch(t, s); 2983 }
2984 }, 2984
2985 2985 endNode = t.endContainer;
2986 getStart : function() { 2986 while (depthDiff < 0) {
2987 var t = this, r = t.getRng(), e; 2987 endNode = endNode.parentNode;
2988 2988 depthDiff++;
2989 if (isIE) { 2989 }
2990 if (r.item) 2990
2991 return r.item(0); 2991 // ascend the ancestor hierarchy until we have a common parent.
2992 2992 for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {
2993 r = r.duplicate(); 2993 startNode = sp;
2994 r.collapse(1); 2994 endNode = ep;
2995 e = r.parentElement(); 2995 }
2996 2996
2997 if (e && e.nodeName == 'BODY') 2997 return t._traverseCommonAncestors(startNode, endNode, how);
2998 return e.firstChild; 2998 },
2999 2999
3000 return e; 3000 _traverseSameContainer : function(how) {
3001 } else { 3001 var t = this, frag, s, sub, n, cnt, sibling, xferNode;
3002 e = r.startContainer; 3002
3003 3003 if (how != DELETE)
3004 if (e.nodeName == 'BODY') 3004 frag = t.dom.doc.createDocumentFragment();
3005 return e.firstChild; 3005
3006 3006 // If selection is empty, just return the fragment
3007 return t.dom.getParent(e, function(n) {return n.nodeType == 1;}); 3007 if (t.startOffset == t.endOffset)
3008 } 3008 return frag;
3009 }, 3009
3010 3010 // Text node needs special case handling
3011 getEnd : function() { 3011 if (t.startContainer.nodeType == 3 /* TEXT_NODE */) {
3012 var t = this, r = t.getRng(), e; 3012 // get the substring
3013 3013 s = t.startContainer.nodeValue;
3014 if (isIE) { 3014 sub = s.substring(t.startOffset, t.endOffset);
3015 if (r.item) 3015
3016 return r.item(0); 3016 // set the original text node to its new value
3017 3017 if (how != CLONE) {
3018 r = r.duplicate(); 3018 t.startContainer.deleteData(t.startOffset, t.endOffset - t.startOffset);
3019 r.collapse(0); 3019
3020 e = r.parentElement(); 3020 // Nothing is partially selected, so collapse to start point
3021 3021 t.collapse(true);
3022 if (e && e.nodeName == 'BODY') 3022 }
3023 return e.lastChild; 3023
3024 3024 if (how == DELETE)
3025 return e; 3025 return null;
3026 } else { 3026
3027 e = r.endContainer; 3027 frag.appendChild(t.dom.doc.createTextNode(sub));
3028 3028 return frag;
3029 if (e.nodeName == 'BODY') 3029 }
3030 return e.lastChild; 3030
3031 3031 // Copy nodes between the start/end offsets.
3032 return t.dom.getParent(e, function(n) {return n.nodeType == 1;}); 3032 n = getSelectedNode(t.startContainer, t.startOffset);
3033 } 3033 cnt = t.endOffset - t.startOffset;
3034 }, 3034
3035 3035 while (cnt > 0) {
3036 getBookmark : function(si) { 3036 sibling = n.nextSibling;
3037 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; 3037 xferNode = t._traverseFullySelected(n, how);
3038 sx = vp.x; 3038
3039 sy = vp.y; 3039 if (frag)
3040 3040 frag.appendChild( xferNode );
3041 // Simple bookmark fast but not as persistent 3041
3042 if (si == 'simple') 3042 --cnt;
3043 return {rng : r, scrollX : sx, scrollY : sy}; 3043 n = sibling;
3044 3044 }
3045 // Handle IE 3045
3046 if (isIE) { 3046 // Nothing is partially selected, so collapse to start point
3047 // Control selection 3047 if (how != CLONE)
3048 if (r.item) { 3048 t.collapse(true);
3049 e = r.item(0); 3049
3050 3050 return frag;
3051 each(t.dom.select(e.nodeName), function(n, i) { 3051 },
3052 if (e == n) { 3052
3053 sp = i; 3053 _traverseCommonStartContainer : function(endAncestor, how) {
3054 return false; 3054 var t = this, frag, n, endIdx, cnt, sibling, xferNode;
3055 } 3055
3056 }); 3056 if (how != DELETE)
3057 3057 frag = t.dom.doc.createDocumentFragment();
3058 return { 3058
3059 tag : e.nodeName, 3059 n = t._traverseRightBoundary(endAncestor, how);
3060 index : sp, 3060
3061 scrollX : sx, 3061 if (frag)
3062 scrollY : sy 3062 frag.appendChild(n);
3063 }; 3063
3064 } 3064 endIdx = indexOf(endAncestor, t.startContainer);
3065 3065 cnt = endIdx - t.startOffset;
3066 // Text selection 3066
3067 tr = t.dom.doc.body.createTextRange(); 3067 if (cnt <= 0) {
3068 tr.moveToElementText(ro); 3068 // Collapse to just before the endAncestor, which
3069 tr.collapse(true); 3069 // is partially selected.
3070 bp = Math.abs(tr.move('character', c)); 3070 if (how != CLONE) {
3071 3071 t.setEndBefore(endAncestor);
3072 tr = r.duplicate(); 3072 t.collapse(false);
3073 tr.collapse(true); 3073 }
3074 sp = Math.abs(tr.move('character', c)); 3074
3075 3075 return frag;
3076 tr = r.duplicate(); 3076 }
3077 tr.collapse(false); 3077
3078 le = Math.abs(tr.move('character', c)) - sp; 3078 n = endAncestor.previousSibling;
3079 3079 while (cnt > 0) {
3080 return { 3080 sibling = n.previousSibling;
3081 start : sp - bp, 3081 xferNode = t._traverseFullySelected(n, how);
3082 length : le, 3082
3083 scrollX : sx, 3083 if (frag)
3084 scrollY : sy 3084 frag.insertBefore(xferNode, frag.firstChild);
3085 }; 3085
3086 } 3086 --cnt;
3087 3087 n = sibling;
3088 // Handle W3C 3088 }
3089 e = t.getNode(); 3089
3090 s = t.getSel(); 3090 // Collapse to just before the endAncestor, which
3091 3091 // is partially selected.
3092 if (!s) 3092 if (how != CLONE) {
3093 return null; 3093 t.setEndBefore(endAncestor);
3094 3094 t.collapse(false);
3095 // Image selection 3095 }
3096 if (e && e.nodeName == 'IMG') { 3096
3097 return { 3097 return frag;
3098 scrollX : sx, 3098 },
3099 scrollY : sy 3099
3100 }; 3100 _traverseCommonEndContainer : function(startAncestor, how) {
3101 } 3101 var t = this, frag, startIdx, n, cnt, sibling, xferNode;
3102 3102
3103 // Text selection 3103 if (how != DELETE)
3104 3104 frag = t.dom.doc.createDocumentFragment();
3105 function getPos(r, sn, en) { 3105
3106 var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}; 3106 n = t._traverseLeftBoundary(startAncestor, how);
3107 3107 if (frag)
3108 while ((n = w.nextNode()) != null) { 3108 frag.appendChild(n);
3109 if (n == sn) 3109
3110 d.start = p; 3110 startIdx = indexOf(startAncestor, t.endContainer);
3111 3111 ++startIdx; // Because we already traversed it....
3112 if (n == en) { 3112
3113 d.end = p; 3113 cnt = t.endOffset - startIdx;
3114 return d; 3114 n = startAncestor.nextSibling;
3115 } 3115 while (cnt > 0) {
3116 3116 sibling = n.nextSibling;
3117 p += trimNl(n.nodeValue || '').length; 3117 xferNode = t._traverseFullySelected(n, how);
3118 } 3118
3119 3119 if (frag)
3120 return null; 3120 frag.appendChild(xferNode);
3121 }; 3121
3122 3122 --cnt;
3123 // Caret or selection 3123 n = sibling;
3124 if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) { 3124 }
3125 e = getPos(ro, s.anchorNode, s.focusNode); 3125
3126 3126 if (how != CLONE) {
3127 if (!e) 3127 t.setStartAfter(startAncestor);
3128 return {scrollX : sx, scrollY : sy}; 3128 t.collapse(true);
3129 3129 }
3130 // Count whitespace before 3130
3131 trimNl(s.anchorNode.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;}); 3131 return frag;
3132 3132 },
3133 return { 3133
3134 start : Math.max(e.start + s.anchorOffset - wb, 0), 3134 _traverseCommonAncestors : function(startAncestor, endAncestor, how) {
3135 end : Math.max(e.end + s.focusOffset - wb, 0), 3135 var t = this, n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;
3136 scrollX : sx, 3136
3137 scrollY : sy, 3137 if (how != DELETE)
3138 beg : s.anchorOffset - wb == 0 3138 frag = t.dom.doc.createDocumentFragment();
3139 }; 3139
3140 } else { 3140 n = t._traverseLeftBoundary(startAncestor, how);
3141 e = getPos(ro, r.startContainer, r.endContainer); 3141 if (frag)
3142 3142 frag.appendChild(n);
3143 // Count whitespace before start and end container 3143
3144 //(r.startContainer.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;}); 3144 commonParent = startAncestor.parentNode;
3145 //(r.endContainer.nodeValue || '').replace(/^\s+/, function(a) {wa = a.length;}); 3145 startOffset = indexOf(startAncestor, commonParent);
3146 3146 endOffset = indexOf(endAncestor, commonParent);
3147 if (!e) 3147 ++startOffset;
3148 return {scrollX : sx, scrollY : sy}; 3148
3149 3149 cnt = endOffset - startOffset;
3150 return { 3150 sibling = startAncestor.nextSibling;
3151 start : Math.max(e.start + r.startOffset - wb, 0), 3151
3152 end : Math.max(e.end + r.endOffset - wa, 0), 3152 while (cnt > 0) {
3153 scrollX : sx, 3153 nextSibling = sibling.nextSibling;
3154 scrollY : sy, 3154 n = t._traverseFullySelected(sibling, how);
3155 beg : r.startOffset - wb == 0 3155
3156 }; 3156 if (frag)
3157 } 3157 frag.appendChild(n);
3158 }, 3158
3159 3159 sibling = nextSibling;
3160 moveToBookmark : function(b) { 3160 --cnt;
3161 var t = this, r = t.getRng(), s = t.getSel(), ro = t.dom.getRoot(), sd, nvl, nv; 3161 }
3162 3162
3163 function getPos(r, sp, ep) { 3163 n = t._traverseRightBoundary(endAncestor, how);
3164 var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}, o, v, wa, wb; 3164
3165 3165 if (frag)
3166 while ((n = w.nextNode()) != null) { 3166 frag.appendChild(n);
3167 wa = wb = 0; 3167
3168 3168 if (how != CLONE) {
3169 nv = n.nodeValue || ''; 3169 t.setStartAfter(startAncestor);
3170 //nv.replace(/^\s+[^\s]/, function(a) {wb = a.length - 1;}); 3170 t.collapse(true);
3171 //nv.replace(/[^\s]\s+$/, function(a) {wa = a.length - 1;}); 3171 }
3172 3172
3173 nvl = trimNl(nv).length; 3173 return frag;
3174 p += nvl; 3174 },
3175 3175
3176 if (p >= sp && !d.startNode) { 3176 _traverseRightBoundary : function(root, how) {
3177 o = sp - (p - nvl); 3177 var t = this, next = getSelectedNode(t.endContainer, t.endOffset - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent;
3178 3178 var isFullySelected = next != t.endContainer;
3179 // Fix for odd quirk in FF 3179
3180 if (b.beg && o >= nvl) 3180 if (next == root)
3181 continue; 3181 return t._traverseNode(next, isFullySelected, false, how);
3182 3182
3183 d.startNode = n; 3183 parent = next.parentNode;
3184 d.startOffset = o + wb; 3184 clonedParent = t._traverseNode(parent, false, false, how);
3185 } 3185
3186 3186 while (parent != null) {
3187 if (p >= ep) { 3187 while (next != null) {
3188 d.endNode = n; 3188 prevSibling = next.previousSibling;
3189 d.endOffset = ep - (p - nvl) + wb; 3189 clonedChild = t._traverseNode(next, isFullySelected, false, how);
3190 return d; 3190
3191 } 3191 if (how != DELETE)
3192 } 3192 clonedParent.insertBefore(clonedChild, clonedParent.firstChild);
3193 3193
3194 return null; 3194 isFullySelected = true;
3195 }; 3195 next = prevSibling;
3196 3196 }
3197 if (!b) 3197
3198 return false; 3198 if (parent == root)
3199 3199 return clonedParent;
3200 t.win.scrollTo(b.scrollX, b.scrollY); 3200
3201 3201 next = parent.previousSibling;
3202 // Handle explorer 3202 parent = parent.parentNode;
3203 if (isIE) { 3203
3204 // Handle simple 3204 clonedGrandParent = t._traverseNode(parent, false, false, how);
3205 if (r = b.rng) { 3205
3206 try { 3206 if (how != DELETE)
3207 r.select(); 3207 clonedGrandParent.appendChild(clonedParent);
3208 } catch (ex) { 3208
3209 // Ignore 3209 clonedParent = clonedGrandParent;
3210 } 3210 }
3211 3211
3212 return true; 3212 // should never occur
3213 } 3213 return null;
3214 3214 },
3215 t.win.focus(); 3215
3216 3216 _traverseLeftBoundary : function(root, how) {
3217 // Handle control bookmark 3217 var t = this, next = getSelectedNode(t.startContainer, t.startOffset);
3218 if (b.tag) { 3218 var isFullySelected = next != t.startContainer, parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;
3219 r = ro.createControlRange(); 3219
3220 3220 if (next == root)
3221 each(t.dom.select(b.tag), function(n, i) { 3221 return t._traverseNode(next, isFullySelected, true, how);
3222 if (i == b.index) 3222
3223 r.addElement(n); 3223 parent = next.parentNode;
3224 }); 3224 clonedParent = t._traverseNode(parent, false, true, how);
3225 } else { 3225
3226 // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs 3226 while (parent != null) {
3227 try { 3227 while (next != null) {
3228 // Incorrect bookmark 3228 nextSibling = next.nextSibling;
3229 if (b.start < 0) 3229 clonedChild = t._traverseNode(next, isFullySelected, true, how);
3230 return true; 3230
3231 3231 if (how != DELETE)
3232 r = s.createRange(); 3232 clonedParent.appendChild(clonedChild);
3233 r.moveToElementText(ro); 3233
3234 r.collapse(true); 3234 isFullySelected = true;
3235 r.moveStart('character', b.start); 3235 next = nextSibling;
3236 r.moveEnd('character', b.length); 3236 }
3237 } catch (ex2) { 3237
3238 return true; 3238 if (parent == root)
3239 } 3239 return clonedParent;
3240 } 3240
3241 3241 next = parent.nextSibling;
3242 try { 3242 parent = parent.parentNode;
3243 r.select(); 3243
3244 } catch (ex) { 3244 clonedGrandParent = t._traverseNode(parent, false, true, how);
3245 // Needed for some odd IE bug #1843306 3245
3246 } 3246 if (how != DELETE)
3247 3247 clonedGrandParent.appendChild(clonedParent);
3248 return true; 3248
3249 } 3249 clonedParent = clonedGrandParent;
3250 3250 }
3251 // Handle W3C 3251
3252 if (!s) 3252 // should never occur
3253 return false; 3253 return null;
3254 3254 },
3255 // Handle simple 3255
3256 if (b.rng) { 3256 _traverseNode : function(n, isFullySelected, isLeft, how) {
3257 s.removeAllRanges(); 3257 var t = this, txtValue, newNodeValue, oldNodeValue, offset, newNode;
3258 s.addRange(b.rng); 3258
3259 } else { 3259 if (isFullySelected)
3260 if (is(b.start) && is(b.end)) { 3260 return t._traverseFullySelected(n, how);
3261 try { 3261
3262 sd = getPos(ro, b.start, b.end); 3262 if (n.nodeType == 3 /* TEXT_NODE */) {
3263 3263 txtValue = n.nodeValue;
3264 if (sd) { 3264
3265 r = t.dom.doc.createRange(); 3265 if (isLeft) {
3266 r.setStart(sd.startNode, sd.startOffset); 3266 offset = t.startOffset;
3267 r.setEnd(sd.endNode, sd.endOffset); 3267 newNodeValue = txtValue.substring(offset);
3268 s.removeAllRanges(); 3268 oldNodeValue = txtValue.substring(0, offset);
3269 s.addRange(r); 3269 } else {
3270 } 3270 offset = t.endOffset;
3271 3271 newNodeValue = txtValue.substring(0, offset);
3272 if (!tinymce.isOpera) 3272 oldNodeValue = txtValue.substring(offset);
3273 t.win.focus(); 3273 }
3274 } catch (ex) { 3274
3275 // Ignore 3275 if (how != CLONE)
3276 } 3276 n.nodeValue = oldNodeValue;
3277 } 3277
3278 } 3278 if (how == DELETE)
3279 }, 3279 return null;
3280 3280
3281 select : function(n, c) { 3281 newNode = n.cloneNode(false);
3282 var t = this, r = t.getRng(), s = t.getSel(), b, fn, ln, d = t.win.document; 3282 newNode.nodeValue = newNodeValue;
3283 3283
3284 function first(n) { 3284 return newNode;
3285 return n ? d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false).nextNode() : null; 3285 }
3286 }; 3286
3287 3287 if (how == DELETE)
3288 function last(n) { 3288 return null;
3289 var c, o, w; 3289
3290 3290 return n.cloneNode(false);
3291 if (!n) 3291 },
3292 return null; 3292
3293 3293 _traverseFullySelected : function(n, how) {
3294 w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); 3294 var t = this;
3295 while (c = w.nextNode()) 3295
3296 o = c; 3296 if (how != DELETE)
3297 3297 return how == CLONE ? n.cloneNode(true) : n;
3298 return o; 3298
3299 }; 3299 n.parentNode.removeChild(n);
3300 3300 return null;
3301 if (isIE) { 3301 }
3302 try { 3302 });
3303 b = d.body; 3303
3304 3304 ns.Range = Range;
3305 if (/^(IMG|TABLE)$/.test(n.nodeName)) { 3305})(tinymce.dom);
3306 r = b.createControlRange(); 3306(function() {
3307 r.addElement(n); 3307 function Selection(selection) {
3308 } else { 3308 var t = this, invisibleChar = '\uFEFF', range, lastIERng;
3309 r = b.createTextRange(); 3309
3310 r.moveToElementText(n); 3310 function compareRanges(rng1, rng2) {
3311 } 3311 if (rng1 && rng2) {
3312 3312 // Both are control ranges and the selected element matches
3313 r.select(); 3313 if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))
3314 } catch (ex) { 3314 return 1;
3315 // Throws illigal agrument in IE some times 3315
3316 } 3316 // Both are text ranges and the range matches
3317 } else { 3317 if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))
3318 if (c) { 3318 return 1;
3319 fn = first(n); 3319 }
3320 ln = last(n); 3320
3321 3321 return 0;
3322 if (fn && ln) { 3322 };
3323 //console.debug(fn, ln); 3323
3324 r = d.createRange(); 3324 function getRange() {
3325 r.setStart(fn, 0); 3325 var dom = selection.dom, ieRange = selection.getRng(), domRange = dom.createRng(), startPos, endPos, element, sc, ec, collapsed;
3326 r.setEnd(ln, ln.nodeValue.length); 3326
3327 } else 3327 function findIndex(element) {
3328 r.selectNode(n); 3328 var nl = element.parentNode.childNodes, i;
3329 } else 3329
3330 r.selectNode(n); 3330 for (i = nl.length - 1; i >= 0; i--) {
3331 3331 if (nl[i] == element)
3332 t.setRng(r); 3332 return i;
3333 } 3333 }
3334 3334
3335 return n; 3335 return -1;
3336 }, 3336 };
3337 3337
3338 isCollapsed : function() { 3338 function findEndPoint(start) {
3339 var t = this, r = t.getRng(), s = t.getSel(); 3339 var rng = ieRange.duplicate(), parent, i, nl, n, offset = 0, index = 0, pos, tmpRng;
3340 3340
3341 if (!r || r.item) 3341 // Insert marker character
3342 return false; 3342 rng.collapse(start);
3343 3343 parent = rng.parentElement();
3344 return !s || r.boundingWidth == 0 || r.collapsed; 3344 rng.pasteHTML(invisibleChar); // Needs to be a pasteHTML instead of .text = since IE has a bug with nodeValue
3345 }, 3345
3346 3346 // Find marker character
3347 collapse : function(b) { 3347 nl = parent.childNodes;
3348 var t = this, r = t.getRng(), n; 3348 for (i = 0; i < nl.length; i++) {
3349 3349 n = nl[i];
3350 // Control range on IE 3350
3351 if (r.item) { 3351 // Calculate node index excluding text node fragmentation
3352 n = r.item(0); 3352 if (i > 0 && (n.nodeType !== 3 || nl[i - 1].nodeType !== 3))
3353 r = this.win.document.body.createTextRange(); 3353 index++;
3354 r.moveToElementText(n); 3354
3355 } 3355 // If text node then calculate offset
3356 3356 if (n.nodeType === 3) {
3357 r.collapse(!!b); 3357 // Look for marker
3358 t.setRng(r); 3358 pos = n.nodeValue.indexOf(invisibleChar);
3359 }, 3359 if (pos !== -1) {
3360 3360 offset += pos;
3361 getSel : function() { 3361 break;
3362 var t = this, w = this.win; 3362 }
3363 3363
3364 return w.getSelection ? w.getSelection() : w.document.selection; 3364 offset += n.nodeValue.length;
3365 }, 3365 } else
3366 3366 offset = 0;
3367 getRng : function() { 3367 }
3368 var t = this, s = t.getSel(), r; 3368
3369 3369 // Remove marker character
3370 try { 3370 rng.moveStart('character', -1);
3371 if (s) 3371 rng.text = '';
3372 r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : t.win.document.createRange()); 3372
3373 } catch (ex) { 3373 return {index : index, offset : offset, parent : parent};
3374 // IE throws unspecified error here if TinyMCE is placed in a frame/iframe 3374 };
3375 } 3375
3376 3376 // If selection is outside the current document just return an empty range
3377 // No range found then create an empty one 3377 element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();
3378 // This can occur when the editor is placed in a hidden container element on Gecko 3378 if (element.ownerDocument != dom.doc)
3379 // Or on IE when there was an exception 3379 return domRange;
3380 if (!r) 3380
3381 r = isIE ? t.win.document.body.createTextRange() : t.win.document.createRange(); 3381 // Handle control selection or text selection of a image
3382 3382 if (ieRange.item || !element.hasChildNodes()) {
3383 return r; 3383 domRange.setStart(element.parentNode, findIndex(element));
3384 }, 3384 domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);
3385 3385
3386 setRng : function(r) { 3386 return domRange;
3387 var s; 3387 }
3388 3388
3389 if (!isIE) { 3389 // Check collapsed state
3390 s = this.getSel(); 3390 collapsed = selection.isCollapsed();
3391 3391
3392 if (s) { 3392 // Find start and end pos index and offset
3393 s.removeAllRanges(); 3393 startPos = findEndPoint(true);
3394 s.addRange(r); 3394 endPos = findEndPoint(false);
3395 } 3395
3396 } else { 3396 // Normalize the elements to avoid fragmented dom
3397 try { 3397 startPos.parent.normalize();
3398 r.select(); 3398 endPos.parent.normalize();
3399 } catch (ex) { 3399
3400 // Needed for some odd IE bug #1843306 3400 // Set start container and offset
3401 } 3401 sc = startPos.parent.childNodes[Math.min(startPos.index, startPos.parent.childNodes.length - 1)];
3402 } 3402
3403 }, 3403 if (sc.nodeType != 3)
3404 3404 domRange.setStart(startPos.parent, startPos.index);
3405 setNode : function(n) { 3405 else
3406 var t = this; 3406 domRange.setStart(startPos.parent.childNodes[startPos.index], startPos.offset);
3407 3407
3408 t.setContent(t.dom.getOuterHTML(n)); 3408 // Set end container and offset
3409 3409 ec = endPos.parent.childNodes[Math.min(endPos.index, endPos.parent.childNodes.length - 1)];
3410 return n; 3410
3411 }, 3411 if (ec.nodeType != 3) {
3412 3412 if (!collapsed)
3413 getNode : function() { 3413 endPos.index++;
3414 var t = this, r = t.getRng(), s = t.getSel(), e; 3414
3415 3415 domRange.setEnd(endPos.parent, endPos.index);
3416 if (!isIE) { 3416 } else
3417 // Range maybe lost after the editor is made visible again 3417 domRange.setEnd(endPos.parent.childNodes[endPos.index], endPos.offset);
3418 if (!r) 3418
3419 return t.dom.getRoot(); 3419 // If not collapsed then make sure offsets are valid
3420 3420 if (!collapsed) {
3421 e = r.commonAncestorContainer; 3421 sc = domRange.startContainer;
3422 3422 if (sc.nodeType == 1)
3423 // Handle selection a image or other control like element such as anchors 3423 domRange.setStart(sc, Math.min(domRange.startOffset, sc.childNodes.length));
3424 if (!r.collapsed) { 3424
3425 // If the anchor node is a element instead of a text node then return this element 3425 ec = domRange.endContainer;
3426 if (tinymce.isWebKit && s.anchorNode && s.anchorNode.nodeType == 1) 3426 if (ec.nodeType == 1)
3427 return s.anchorNode.childNodes[s.anchorOffset]; 3427 domRange.setEnd(ec, Math.min(domRange.endOffset, ec.childNodes.length));
3428 3428 }
3429 if (r.startContainer == r.endContainer) { 3429
3430 if (r.startOffset - r.endOffset < 2) { 3430 // Restore selection to new range
3431 if (r.startContainer.hasChildNodes()) 3431 t.addRange(domRange);
3432 e = r.startContainer.childNodes[r.startOffset]; 3432
3433 } 3433 return domRange;
3434 } 3434 };
3435 } 3435
3436 3436 this.addRange = function(rng) {
3437 return t.dom.getParent(e, function(n) { 3437 var ieRng, body = selection.dom.doc.body, startPos, endPos, sc, so, ec, eo;
3438 return n.nodeType == 1; 3438
3439 }); 3439 // Setup some shorter versions
3440 } 3440 sc = rng.startContainer;
3441 3441 so = rng.startOffset;
3442 return r.item ? r.item(0) : r.parentElement(); 3442 ec = rng.endContainer;
3443 }, 3443 eo = rng.endOffset;
3444 3444 ieRng = body.createTextRange();
3445 destroy : function(s) { 3445
3446 var t = this; 3446 // Find element
3447 3447 sc = sc.nodeType == 1 ? sc.childNodes[Math.min(so, sc.childNodes.length - 1)] : sc;
3448 t.win = null; 3448 ec = ec.nodeType == 1 ? ec.childNodes[Math.min(so == eo ? eo : eo - 1, ec.childNodes.length - 1)] : ec;
3449 3449
3450 // Manual destroy then remove unload handler 3450 // Single element selection
3451 if (!s) 3451 if (sc == ec && sc.nodeType == 1) {
3452 tinymce.removeUnload(t.destroy); 3452 // Make control selection for some elements
3453 } 3453 if (/^(IMG|TABLE)$/.test(sc.nodeName) && so != eo) {
3454 3454 ieRng = body.createControlRange();
3455 }); 3455 ieRng.addElement(sc);
3456})(); 3456 } else {
3457 3457 ieRng = body.createTextRange();
3458/* file:jscripts/tiny_mce/classes/dom/XMLWriter.js */ 3458
3459 3459 // Padd empty elements with invisible character
3460(function() { 3460 if (!sc.hasChildNodes() && sc.canHaveHTML)
3461 tinymce.create('tinymce.dom.XMLWriter', { 3461 sc.innerHTML = invisibleChar;
3462 node : null, 3462
3463 3463 // Select element contents
3464 XMLWriter : function(s) { 3464 ieRng.moveToElementText(sc);
3465 // Get XML document 3465
3466 function getXML() { 3466 // If it's only containing a padding remove it so the caret remains
3467 var i = document.implementation; 3467 if (sc.innerHTML == invisibleChar) {
3468 3468 ieRng.collapse(true);
3469 if (!i || !i.createDocument) { 3469 sc.removeChild(sc.firstChild);
3470 // Try IE objects 3470 }
3471 try {return new ActiveXObject('MSXML2.DOMDocument');} catch (ex) {} 3471 }
3472 try {return new ActiveXObject('Microsoft.XmlDom');} catch (ex) {} 3472
3473 } else 3473 if (so == eo)
3474 return i.createDocument('', '', null); 3474 ieRng.collapse(eo <= rng.endContainer.childNodes.length - 1);
3475 }; 3475
3476 3476 ieRng.select();
3477 this.doc = getXML(); 3477
3478 3478 return;
3479 // Since Opera and WebKit doesn't escape > into &gt; we need to do it our self to normalize the output for all browsers 3479 }
3480 this.valid = tinymce.isOpera || tinymce.isWebKit; 3480
3481 3481 function getCharPos(container, offset) {
3482 this.reset(); 3482 var nodeVal, rng, pos;
3483 }, 3483
3484 3484 if (container.nodeType != 3)
3485 reset : function() { 3485 return -1;
3486 var t = this, d = t.doc; 3486
3487 3487 nodeVal = container.nodeValue;
3488 if (d.firstChild) 3488 rng = body.createTextRange();
3489 d.removeChild(d.firstChild); 3489
3490 3490 // Insert marker at offset position
3491 t.node = d.appendChild(d.createElement("html")); 3491 container.nodeValue = nodeVal.substring(0, offset) + invisibleChar + nodeVal.substring(offset);
3492 }, 3492
3493 3493 // Find char pos of marker and remove it
3494 writeStartElement : function(n) { 3494 rng.moveToElementText(container.parentNode);
3495 var t = this; 3495 rng.findText(invisibleChar);
3496 3496 pos = Math.abs(rng.moveStart('character', -0xFFFFF));
3497 t.node = t.node.appendChild(t.doc.createElement(n)); 3497 container.nodeValue = nodeVal;
3498 }, 3498
3499 3499 return pos;
3500 writeAttribute : function(n, v) { 3500 };
3501 if (this.valid) 3501
3502 v = v.replace(/>/g, '%MCGT%'); 3502 // Collapsed range
3503 3503 if (rng.collapsed) {
3504 this.node.setAttribute(n, v); 3504 pos = getCharPos(sc, so);
3505 }, 3505
3506 3506 ieRng = body.createTextRange();
3507 writeEndElement : function() { 3507 ieRng.move('character', pos);
3508 this.node = this.node.parentNode; 3508 ieRng.select();
3509 }, 3509
3510 3510 return;
3511 writeFullEndElement : function() { 3511 } else {
3512 var t = this, n = t.node; 3512 // If same text container
3513 3513 if (sc == ec && sc.nodeType == 3) {
3514 n.appendChild(t.doc.createTextNode("")); 3514 startPos = getCharPos(sc, so);
3515 t.node = n.parentNode; 3515
3516 }, 3516 ieRng.move('character', startPos);
3517 3517 ieRng.moveEnd('character', eo - so);
3518 writeText : function(v) { 3518 ieRng.select();
3519 if (this.valid) 3519
3520 v = v.replace(/>/g, '%MCGT%'); 3520 return;
3521 3521 }
3522 this.node.appendChild(this.doc.createTextNode(v)); 3522
3523 }, 3523 // Get caret positions
3524 3524 startPos = getCharPos(sc, so);
3525 writeCDATA : function(v) { 3525 endPos = getCharPos(ec, eo);
3526 this.node.appendChild(this.doc.createCDATA(v)); 3526 ieRng = body.createTextRange();
3527 }, 3527
3528 3528 // Move start of range to start character position or start element
3529 writeComment : function(v) { 3529 if (startPos == -1) {
3530 // Fix for bug #2035694 3530 ieRng.moveToElementText(sc);
3531 if (tinymce.isIE) 3531 startPos = 0;
3532 v = v.replace(/^\-|\-$/g, ' '); 3532 } else
3533 3533 ieRng.move('character', startPos);
3534 this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g, ' '))); 3534
3535 }, 3535 // Move end of range to end character position or end element
3536 3536 tmpRng = body.createTextRange();
3537 getContent : function() { 3537
3538 var h; 3538 if (endPos == -1)
3539 3539 tmpRng.moveToElementText(ec);
3540 h = this.doc.xml || new XMLSerializer().serializeToString(this.doc); 3540 else
3541 h = h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g, ''); 3541 tmpRng.move('character', endPos);
3542 h = h.replace(/ ?\/>/g, ' />'); 3542
3543 3543 ieRng.setEndPoint('EndToEnd', tmpRng);
3544 if (this.valid) 3544 ieRng.select();
3545 h = h.replace(/\%MCGT%/g, '&gt;'); 3545
3546 3546 return;
3547 return h; 3547 }
3548 } 3548 };
3549 3549
3550 }); 3550 this.getRangeAt = function() {
3551})(); 3551 // Setup new range if the cache is empty
3552 3552 if (!range || !compareRanges(lastIERng, selection.getRng())) {
3553/* file:jscripts/tiny_mce/classes/dom/StringWriter.js */ 3553 range = getRange();
3554 3554
3555(function() { 3555 // Store away text range for next call
3556 tinymce.create('tinymce.dom.StringWriter', { 3556 lastIERng = selection.getRng();
3557 str : null, 3557 }
3558 tags : null, 3558
3559 count : 0, 3559 // Return cached range
3560 settings : null, 3560 return range;
3561 indent : null, 3561 };
3562 3562
3563 StringWriter : function(s) { 3563 this.destroy = function() {
3564 this.settings = tinymce.extend({ 3564 // Destroy cached range and last IE range to avoid memory leaks
3565 indent_char : ' ', 3565 lastIERng = range = null;
3566 indentation : 1 3566 };
3567 }, s); 3567 };
3568 3568
3569 this.reset(); 3569 // Expose the selection object
3570 }, 3570 tinymce.dom.TridentSelection = Selection;
3571 3571})();
3572 reset : function() { 3572(function(tinymce) {
3573 this.indent = ''; 3573 // Shorten names
3574 this.str = ""; 3574 var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;
3575 this.tags = []; 3575
3576 this.count = 0; 3576 tinymce.create('tinymce.dom.EventUtils', {
3577 }, 3577 EventUtils : function() {
3578 3578 this.inits = [];
3579 writeStartElement : function(n) { 3579 this.events = [];
3580 this._writeAttributesEnd(); 3580 },
3581 this.writeRaw('<' + n); 3581
3582 this.tags.push(n); 3582 add : function(o, n, f, s) {
3583 this.inAttr = true; 3583 var cb, t = this, el = t.events, r;
3584 this.count++; 3584
3585 this.elementCount = this.count; 3585 if (n instanceof Array) {
3586 }, 3586 r = [];
3587 3587
3588 writeAttribute : function(n, v) { 3588 each(n, function(n) {
3589 var t = this; 3589 r.push(t.add(o, n, f, s));
3590 3590 });
3591 t.writeRaw(" " + t.encode(n) + '="' + t.encode(v) + '"'); 3591
3592 }, 3592 return r;
3593 3593 }
3594 writeEndElement : function() { 3594
3595 var n; 3595 // Handle array
3596 3596 if (o && o.hasOwnProperty && o instanceof Array) {
3597 if (this.tags.length > 0) { 3597 r = [];
3598 n = this.tags.pop(); 3598
3599 3599 each(o, function(o) {
3600 if (this._writeAttributesEnd(1)) 3600 o = DOM.get(o);
3601 this.writeRaw('</' + n + '>'); 3601 r.push(t.add(o, n, f, s));
3602 3602 });
3603 if (this.settings.indentation > 0) 3603
3604 this.writeRaw('\n'); 3604 return r;
3605 } 3605 }
3606 }, 3606
3607 3607 o = DOM.get(o);
3608 writeFullEndElement : function() { 3608
3609 if (this.tags.length > 0) { 3609 if (!o)
3610 this._writeAttributesEnd(); 3610 return;
3611 this.writeRaw('</' + this.tags.pop() + '>'); 3611
3612 3612 // Setup event callback
3613 if (this.settings.indentation > 0) 3613 cb = function(e) {
3614 this.writeRaw('\n'); 3614 // Is all events disabled
3615 } 3615 if (t.disabled)
3616 }, 3616 return;
3617 3617
3618 writeText : function(v) { 3618 e = e || window.event;
3619 this._writeAttributesEnd(); 3619
3620 this.writeRaw(this.encode(v)); 3620 // Patch in target, preventDefault and stopPropagation in IE it's W3C valid
3621 this.count++; 3621 if (e && isIE) {
3622 }, 3622 if (!e.target)
3623 3623 e.target = e.srcElement;
3624 writeCDATA : function(v) { 3624
3625 this._writeAttributesEnd(); 3625 // Patch in preventDefault, stopPropagation methods for W3C compatibility
3626 this.writeRaw('<![CDATA[' + v + ']]>'); 3626 tinymce.extend(e, t._stoppers);
3627 this.count++; 3627 }
3628 }, 3628
3629 3629 if (!s)
3630 writeComment : function(v) { 3630 return f(e);
3631 this._writeAttributesEnd(); 3631
3632 this.writeRaw('<!-- ' + v + '-->'); 3632 return f.call(s, e);
3633 this.count++; 3633 };
3634 }, 3634
3635 3635 if (n == 'unload') {
3636 writeRaw : function(v) { 3636 tinymce.unloads.unshift({func : cb});
3637 this.str += v; 3637 return cb;
3638 }, 3638 }
3639 3639
3640 encode : function(s) { 3640 if (n == 'init') {
3641 return s.replace(/[<>&"]/g, function(v) { 3641 if (t.domLoaded)
3642 switch (v) { 3642 cb();
3643 case '<': 3643 else
3644 return '&lt;'; 3644 t.inits.push(cb);
3645 3645
3646 case '>': 3646 return cb;
3647 return '&gt;'; 3647 }
3648 3648
3649 case '&': 3649 // Store away listener reference
3650 return '&amp;'; 3650 el.push({
3651 3651 obj : o,
3652 case '"': 3652 name : n,
3653 return '&quot;'; 3653 func : f,
3654 } 3654 cfunc : cb,
3655 3655 scope : s
3656 return v; 3656 });
3657 }); 3657
3658 }, 3658 t._add(o, n, cb);
3659 3659
3660 getContent : function() { 3660 return f;
3661 return this.str; 3661 },
3662 }, 3662
3663 3663 remove : function(o, n, f) {
3664 _writeAttributesEnd : function(s) { 3664 var t = this, a = t.events, s = false, r;
3665 if (!this.inAttr) 3665
3666 return; 3666 // Handle array
3667 3667 if (o && o.hasOwnProperty && o instanceof Array) {
3668 this.inAttr = false; 3668 r = [];
3669 3669
3670 if (s && this.elementCount == this.count) { 3670 each(o, function(o) {
3671 this.writeRaw(' />'); 3671 o = DOM.get(o);
3672 return false; 3672 r.push(t.remove(o, n, f));
3673 } 3673 });
3674 3674
3675 this.writeRaw('>'); 3675 return r;
3676 3676 }
3677 return true; 3677
3678 } 3678 o = DOM.get(o);
3679 3679
3680 }); 3680 each(a, function(e, i) {
3681})(); 3681 if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {
3682 3682 a.splice(i, 1);
3683/* file:jscripts/tiny_mce/classes/dom/Serializer.js */ 3683 t._remove(o, n, e.cfunc);
3684 3684 s = true;
3685(function() { 3685 return false;
3686 // Shorten names 3686 }
3687 var extend = tinymce.extend, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, isIE = tinymce.isIE, isGecko = tinymce.isGecko; 3687 });
3688 3688
3689 // Returns only attribites that have values not all attributes in IE 3689 return s;
3690 function getIEAtts(n) { 3690 },
3691 var o = []; 3691
3692 3692 clear : function(o) {
3693 // Object will throw exception in IE 3693 var t = this, a = t.events, i, e;
3694 if (n.nodeName == 'OBJECT') 3694
3695 return n.attributes; 3695 if (o) {
3696 3696 o = DOM.get(o);
3697 n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi, function(a, b) { 3697
3698 o.push({specified : 1, nodeName : b}); 3698 for (i = a.length - 1; i >= 0; i--) {
3699 }); 3699 e = a[i];
3700 3700
3701 return o; 3701 if (e.obj === o) {
3702 }; 3702 t._remove(e.obj, e.name, e.cfunc);
3703 3703 e.obj = e.cfunc = null;
3704 function wildcardToRE(s) { 3704 a.splice(i, 1);
3705 return s.replace(/([?+*])/g, '.$1'); 3705 }
3706 }; 3706 }
3707 3707 }
3708 tinymce.create('tinymce.dom.Serializer', { 3708 },
3709 Serializer : function(s) { 3709
3710 var t = this; 3710 cancel : function(e) {
3711 3711 if (!e)
3712 t.key = 0; 3712 return false;
3713 t.onPreProcess = new Dispatcher(t); 3713
3714 t.onPostProcess = new Dispatcher(t); 3714 this.stop(e);
3715 3715
3716 if (tinymce.relaxedDomain && tinymce.isGecko) { 3716 return this.prevent(e);
3717 // Gecko has a bug where we can't create a new XML document if domain relaxing is used 3717 },
3718 t.writer = new tinymce.dom.StringWriter(); 3718
3719 } else { 3719 stop : function(e) {
3720 try { 3720 if (e.stopPropagation)
3721 t.writer = new tinymce.dom.XMLWriter(); 3721 e.stopPropagation();
3722 } catch (ex) { 3722 else
3723 // IE might throw exception if ActiveX is disabled so we then switch to the slightly slower StringWriter 3723 e.cancelBubble = true;
3724 t.writer = new tinymce.dom.StringWriter(); 3724
3725 } 3725 return false;
3726 } 3726 },
3727 3727
3728 // Default settings 3728 prevent : function(e) {
3729 t.settings = s = extend({ 3729 if (e.preventDefault)
3730 dom : tinymce.DOM, 3730 e.preventDefault();
3731 valid_nodes : 0, 3731 else
3732 node_filter : 0, 3732 e.returnValue = false;
3733 attr_filter : 0, 3733
3734 invalid_attrs : /^(mce_|_moz_)/, 3734 return false;
3735 closed : /(br|hr|input|meta|img|link|param|aggregate)/, 3735 },
3736 entity_encoding : 'named', 3736
3737 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', 3737 destroy : function() {
3738 bool_attrs : /(checked|disabled|readonly|selected|nowrap)/, 3738 var t = this;
3739 valid_elements : '*[*]', 3739
3740 extended_valid_elements : 0, 3740 each(t.events, function(e, i) {
3741 valid_child_elements : 0, 3741 t._remove(e.obj, e.name, e.cfunc);
3742 invalid_elements : 0, 3742 e.obj = e.cfunc = null;
3743 fix_table_elements : 0, 3743 });
3744 fix_list_elements : true, 3744
3745 fix_content_duplication : true, 3745 t.events = [];
3746 convert_fonts_to_spans : false, 3746 t = null;
3747 font_size_classes : 0, 3747 },
3748 font_size_style_values : 0, 3748
3749 apply_source_formatting : 0, 3749 _add : function(o, n, f) {
3750 indent_mode : 'simple', 3750 if (o.attachEvent)
3751 indent_char : '\t', 3751 o.attachEvent('on' + n, f);
3752 indent_levels : 1, 3752 else if (o.addEventListener)
3753 remove_linebreaks : 1, 3753 o.addEventListener(n, f, false);
3754 remove_redundant_brs : 1, 3754 else
3755 element_format : 'xhtml' 3755 o['on' + n] = f;
3756 }, s); 3756 },
3757 3757
3758 t.dom = s.dom; 3758 _remove : function(o, n, f) {
3759 3759 if (o) {
3760 if (s.remove_redundant_brs) { 3760 try {
3761 t.onPostProcess.add(function(se, o) { 3761 if (o.detachEvent)
3762 // Remove BR elements at end of list elements since they get rendered in IE 3762 o.detachEvent('on' + n, f);
3763 o.content = o.content.replace(/<br \/>(\s*<\/li>)/g, '$1'); 3763 else if (o.removeEventListener)
3764 }); 3764 o.removeEventListener(n, f, false);
3765 } 3765 else
3766 3766 o['on' + n] = null;
3767 // Remove XHTML element endings i.e. produce crap :) XHTML is better 3767 } catch (ex) {
3768 if (s.element_format == 'html') { 3768 // Might fail with permission denined on IE so we just ignore that
3769 t.onPostProcess.add(function(se, o) { 3769 }
3770 o.content = o.content.replace(/<([^>]+) \/>/g, '<$1>'); 3770 }
3771 }); 3771 },
3772 } 3772
3773 3773 _pageInit : function(win) {
3774 if (s.fix_list_elements) { 3774 var t = this;
3775 t.onPreProcess.add(function(se, o) { 3775
3776 var nl, x, a = ['ol', 'ul'], i, n, p, r = /^(OL|UL)$/, np; 3776 // Keep it from running more than once
3777 3777 if (t.domLoaded)
3778 function prevNode(e, n) { 3778 return;
3779 var a = n.split(','), i; 3779
3780 3780 t.domLoaded = true;
3781 while ((e = e.previousSibling) != null) { 3781
3782 for (i=0; i<a.length; i++) { 3782 each(t.inits, function(c) {
3783 if (e.nodeName == a[i]) 3783 c();
3784 return e; 3784 });
3785 } 3785
3786 } 3786 t.inits = [];
3787 3787 },
3788 return null; 3788
3789 }; 3789 _wait : function(win) {
3790 3790 var t = this, doc = win.document;
3791 for (x=0; x<a.length; x++) { 3791
3792 nl = t.dom.select(a[x], o.node); 3792 // No need since the document is already loaded
3793 3793 if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {
3794 for (i=0; i<nl.length; i++) { 3794 t.domLoaded = 1;
3795 n = nl[i]; 3795 return;
3796 p = n.parentNode; 3796 }
3797 3797
3798 if (r.test(p.nodeName)) { 3798 // Use IE method
3799 np = prevNode(n, 'LI'); 3799 if (doc.attachEvent) {
3800 3800 doc.attachEvent("onreadystatechange", function() {
3801 if (!np) { 3801 if (doc.readyState === "complete") {
3802 np = t.dom.create('li'); 3802 doc.detachEvent("onreadystatechange", arguments.callee);
3803 np.innerHTML = '&nbsp;'; 3803 t._pageInit(win);
3804 np.appendChild(n); 3804 }
3805 p.insertBefore(np, p.firstChild); 3805 });
3806 } else 3806
3807 np.appendChild(n); 3807 if (doc.documentElement.doScroll && win == win.top) {
3808 } 3808 (function() {
3809 } 3809 if (t.domLoaded)
3810 } 3810 return;
3811 }); 3811
3812 } 3812 try {
3813 3813 // If IE is used, use the trick by Diego Perini
3814 if (s.fix_table_elements) { 3814 // http://javascript.nwbox.com/IEContentLoaded/
3815 t.onPreProcess.add(function(se, o) { 3815 doc.documentElement.doScroll("left");
3816 each(t.dom.select('table', o.node), function(e) { 3816 } catch (ex) {
3817 var pa = t.dom.getParent(e, 'H1,H2,H3,H4,H5,H6,P'), pa2, n, tm, pl = [], i, ns; 3817 setTimeout(arguments.callee, 0);
3818 3818 return;
3819 if (pa) { 3819 }
3820 pa2 = pa.cloneNode(false); 3820
3821 3821 t._pageInit(win);
3822 pl.push(e); 3822 })();
3823 for (n = e; n = n.parentNode;) { 3823 }
3824 pl.push(n); 3824 } else if (doc.addEventListener) {
3825 3825 t._add(win, 'DOMContentLoaded', function() {
3826 if (n == pa) 3826 t._pageInit(win);
3827 break; 3827 });
3828 } 3828 }
3829 3829
3830 tm = pa2; 3830 t._add(win, 'load', function() {
3831 for (i = pl.length - 1; i >= 0; i--) { 3831 t._pageInit(win);
3832 if (i == pl.length - 1) { 3832 });
3833 while (ns = pl[i - 1].nextSibling) 3833 },
3834 tm.appendChild(ns.parentNode.removeChild(ns)); 3834
3835 } else { 3835 _stoppers : {
3836 n = pl[i].cloneNode(false); 3836 preventDefault : function() {
3837 3837 this.returnValue = false;
3838 if (i != 0) { 3838 },
3839 while (ns = pl[i - 1].nextSibling) 3839
3840 n.appendChild(ns.parentNode.removeChild(ns)); 3840 stopPropagation : function() {
3841 } 3841 this.cancelBubble = true;
3842 3842 }
3843 tm = tm.appendChild(n); 3843 }
3844 } 3844 });
3845 } 3845
3846 3846 Event = tinymce.dom.Event = new tinymce.dom.EventUtils();
3847 e = t.dom.insertAfter(e.parentNode.removeChild(e), pa); 3847
3848 t.dom.insertAfter(e, pa); 3848 // Dispatch DOM content loaded event for IE and Safari
3849 t.dom.insertAfter(pa2, e); 3849 Event._wait(window);
3850 } 3850
3851 }); 3851 tinymce.addUnload(function() {
3852 }); 3852 Event.destroy();
3853 } 3853 });
3854 }, 3854})(tinymce);
3855 3855(function(tinymce) {
3856 setEntities : function(s) { 3856 var each = tinymce.each;
3857 var t = this, a, i, l = {}, re = '', v; 3857
3858 3858 tinymce.create('tinymce.dom.Element', {
3859 // No need to setup more than once 3859 Element : function(id, s) {
3860 if (t.entityLookup) 3860 var t = this, dom, el;
3861 return; 3861
3862 3862 s = s || {};
3863 // Build regex and lookup array 3863 t.id = id;
3864 a = s.split(','); 3864 t.dom = dom = s.dom || tinymce.DOM;
3865 for (i = 0; i < a.length; i += 2) { 3865 t.settings = s;
3866 v = a[i]; 3866
3867 3867 // Only IE leaks DOM references, this is a lot faster
3868 // Don't add default &amp; &quot; etc. 3868 if (!tinymce.isIE)
3869 if (v == 34 || v == 38 || v == 60 || v == 62) 3869 el = t.dom.get(t.id);
3870 continue; 3870
3871 3871 each([
3872 l[String.fromCharCode(a[i])] = a[i + 1]; 3872 'getPos',
3873 3873 'getRect',
3874 v = parseInt(a[i]).toString(16); 3874 'getParent',
3875 re += '\\u' + '0000'.substring(v.length) + v; 3875 'add',
3876 } 3876 'setStyle',
3877 3877 'getStyle',
3878 if (!re) { 3878 'setStyles',
3879 t.settings.entity_encoding = 'raw'; 3879 'setAttrib',
3880 return; 3880 'setAttribs',
3881 } 3881 'getAttrib',
3882 3882 'addClass',
3883 t.entitiesRE = new RegExp('[' + re + ']', 'g'); 3883 'removeClass',
3884 t.entityLookup = l; 3884 'hasClass',
3885 }, 3885 'getOuterHTML',
3886 3886 'setOuterHTML',
3887 setValidChildRules : function(s) { 3887 'remove',
3888 this.childRules = null; 3888 'show',
3889 this.addValidChildRules(s); 3889 'hide',
3890 }, 3890 'isHidden',
3891 3891 'setHTML',
3892 addValidChildRules : function(s) { 3892 'get'
3893 var t = this, inst, intr, bloc; 3893 ], function(k) {
3894 3894 t[k] = function() {
3895 if (!s) 3895 var a = [id], i;
3896 return; 3896
3897 3897 for (i = 0; i < arguments.length; i++)
3898 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'; 3898 a.push(arguments[i]);
3899 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'; 3899
3900 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'; 3900 a = dom[k].apply(dom, a);
3901 3901 t.update(k);
3902 each(s.split(','), function(s) { 3902
3903 var p = s.split(/\[|\]/), re; 3903 return a;
3904 3904 };
3905 s = ''; 3905 });
3906 each(p[1].split('|'), function(v) { 3906 },
3907 if (s) 3907
3908 s += '|'; 3908 on : function(n, f, s) {
3909 3909 return tinymce.dom.Event.add(this.id, n, f, s);
3910 switch (v) { 3910 },
3911 case '%itrans': 3911
3912 v = intr; 3912 getXY : function() {
3913 break; 3913 return {
3914 3914 x : parseInt(this.getStyle('left')),
3915 case '%itrans_na': 3915 y : parseInt(this.getStyle('top'))
3916 v = intr.substring(2); 3916 };
3917 break; 3917 },
3918 3918
3919 case '%istrict': 3919 getSize : function() {
3920 v = inst; 3920 var n = this.dom.get(this.id);
3921 break; 3921
3922 3922 return {
3923 case '%istrict_na': 3923 w : parseInt(this.getStyle('width') || n.clientWidth),
3924 v = inst.substring(2); 3924 h : parseInt(this.getStyle('height') || n.clientHeight)
3925 break; 3925 };
3926 3926 },
3927 case '%btrans': 3927
3928 v = bloc; 3928 moveTo : function(x, y) {
3929 break; 3929 this.setStyles({left : x, top : y});
3930 3930 },
3931 case '%bstrict': 3931
3932 v = bloc; 3932 moveBy : function(x, y) {
3933 break; 3933 var p = this.getXY();
3934 } 3934
3935 3935 this.moveTo(p.x + x, p.y + y);
3936 s += v; 3936 },
3937 }); 3937
3938 re = new RegExp('^(' + s.toLowerCase() + ')$', 'i'); 3938 resizeTo : function(w, h) {
3939 3939 this.setStyles({width : w, height : h});
3940 each(p[0].split('/'), function(s) { 3940 },
3941 t.childRules = t.childRules || {}; 3941
3942 t.childRules[s] = re; 3942 resizeBy : function(w, h) {
3943 }); 3943 var s = this.getSize();
3944 }); 3944
3945 3945 this.resizeTo(s.w + w, s.h + h);
3946 // Build regex 3946 },
3947 s = ''; 3947
3948 each(t.childRules, function(v, k) { 3948 update : function(k) {
3949 if (s) 3949 var t = this, b, dom = t.dom;
3950 s += '|'; 3950
3951 3951 if (tinymce.isIE6 && t.settings.blocker) {
3952 s += k; 3952 k = k || '';
3953 }); 3953
3954 3954 // Ignore getters
3955 t.parentElementsRE = new RegExp('^(' + s.toLowerCase() + ')$', 'i'); 3955 if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)
3956 3956 return;
3957 /*console.debug(t.parentElementsRE.toString()); 3957
3958 each(t.childRules, function(v) { 3958 // Remove blocker on remove
3959 console.debug(v.toString()); 3959 if (k == 'remove') {
3960 });*/ 3960 dom.remove(t.blocker);
3961 }, 3961 return;
3962 3962 }
3963 setRules : function(s) { 3963
3964 var t = this; 3964 if (!t.blocker) {
3965 3965 t.blocker = dom.uniqueId();
3966 t._setup(); 3966 b = dom.add(t.settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});
3967 t.rules = {}; 3967 dom.setStyle(b, 'opacity', 0);
3968 t.wildRules = []; 3968 } else
3969 t.validElements = {}; 3969 b = dom.get(t.blocker);
3970 3970
3971 return t.addRules(s); 3971 dom.setStyle(b, 'left', t.getStyle('left', 1));
3972 }, 3972 dom.setStyle(b, 'top', t.getStyle('top', 1));
3973 3973 dom.setStyle(b, 'width', t.getStyle('width', 1));
3974 addRules : function(s) { 3974 dom.setStyle(b, 'height', t.getStyle('height', 1));
3975 var t = this, dr; 3975 dom.setStyle(b, 'display', t.getStyle('display', 1));
3976 3976 dom.setStyle(b, 'zIndex', parseInt(t.getStyle('zIndex', 1) || 0) - 1);
3977 if (!s) 3977 }
3978 return; 3978 }
3979 3979 });
3980 t._setup(); 3980})(tinymce);
3981 3981(function(tinymce) {
3982 each(s.split(','), function(s) { 3982 function trimNl(s) {
3983 var p = s.split(/\[|\]/), tn = p[0].split('/'), ra, at, wat, va = []; 3983 return s.replace(/[\n\r]+/g, '');
3984 3984 };
3985 // Extend with default rules 3985
3986 if (dr) 3986 // Shorten names
3987 at = tinymce.extend([], dr.attribs); 3987 var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;
3988 3988
3989 // Parse attributes 3989 tinymce.create('tinymce.dom.Selection', {
3990 if (p.length > 1) { 3990 Selection : function(dom, win, serializer) {
3991 each(p[1].split('|'), function(s) { 3991 var t = this;
3992 var ar = {}, i; 3992
3993 3993 t.dom = dom;
3994 at = at || []; 3994 t.win = win;
3995 3995 t.serializer = serializer;
3996 // Parse attribute rule 3996
3997 s = s.replace(/::/g, '~'); 3997 // Add events
3998 s = /^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s); 3998 each([
3999 s[2] = s[2].replace(/~/g, ':'); 3999 'onBeforeSetContent',
4000 4000 'onBeforeGetContent',
4001 // Add required attributes 4001 'onSetContent',
4002 if (s[1] == '!') { 4002 'onGetContent'
4003 ra = ra || []; 4003 ], function(e) {
4004 ra.push(s[2]); 4004 t[e] = new tinymce.util.Dispatcher(t);
4005 } 4005 });
4006 4006
4007 // Remove inherited attributes 4007 // No W3C Range support
4008 if (s[1] == '-') { 4008 if (!t.win.getSelection)
4009 for (i = 0; i <at.length; i++) { 4009 t.tridentSel = new tinymce.dom.TridentSelection(t);
4010 if (at[i].name == s[2]) { 4010
4011 at.splice(i, 1); 4011 // Prevent leaks
4012 return; 4012 tinymce.addUnload(t.destroy, t);
4013 } 4013 },
4014 } 4014
4015 } 4015 getContent : function(s) {
4016 4016 var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;
4017 switch (s[3]) { 4017
4018 // Add default attrib values 4018 s = s || {};
4019 case '=': 4019 wb = wa = '';
4020 ar.defaultVal = s[4] || ''; 4020 s.get = true;
4021 break; 4021 s.format = s.format || 'html';
4022 4022 t.onBeforeGetContent.dispatch(t, s);
4023 // Add forced attrib values 4023
4024 case ':': 4024 if (s.format == 'text')
4025 ar.forcedVal = s[4]; 4025 return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));
4026 break; 4026
4027 4027 if (r.cloneContents) {
4028 // Add validation values 4028 n = r.cloneContents();
4029 case '<': 4029
4030 ar.validVals = s[4].split('?'); 4030 if (n)
4031 break; 4031 e.appendChild(n);
4032 } 4032 } else if (is(r.item) || is(r.htmlText))
4033 4033 e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;
4034 if (/[*.?]/.test(s[2])) { 4034 else
4035 wat = wat || []; 4035 e.innerHTML = r.toString();
4036 ar.nameRE = new RegExp('^' + wildcardToRE(s[2]) + '$'); 4036
4037 wat.push(ar); 4037 // Keep whitespace before and after
4038 } else { 4038 if (/^\s/.test(e.innerHTML))
4039 ar.name = s[2]; 4039 wb = ' ';
4040 at.push(ar); 4040
4041 } 4041 if (/\s+$/.test(e.innerHTML))
4042 4042 wa = ' ';
4043 va.push(s[2]); 4043
4044 }); 4044 s.getInner = true;
4045 } 4045
4046 4046 s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;
4047 // Handle element names 4047 t.onGetContent.dispatch(t, s);
4048 each(tn, function(s, i) { 4048
4049 var pr = s.charAt(0), x = 1, ru = {}; 4049 return s.content;
4050 4050 },
4051 // Extend with default rule data 4051
4052 if (dr) { 4052 setContent : function(h, s) {
4053 if (dr.noEmpty) 4053 var t = this, r = t.getRng(), c, d = t.win.document;
4054 ru.noEmpty = dr.noEmpty; 4054
4055 4055 s = s || {format : 'html'};
4056 if (dr.fullEnd) 4056 s.set = true;
4057 ru.fullEnd = dr.fullEnd; 4057 h = s.content = t.dom.processHTML(h);
4058 4058
4059 if (dr.padd) 4059 // Dispatch before set content event
4060 ru.padd = dr.padd; 4060 t.onBeforeSetContent.dispatch(t, s);
4061 } 4061 h = s.content;
4062 4062
4063 // Handle prefixes 4063 if (r.insertNode) {
4064 switch (pr) { 4064 // Make caret marker since insertNode places the caret in the beginning of text after insert
4065 case '-': 4065 h += '<span id="__caret">_</span>';
4066 ru.noEmpty = true; 4066
4067 break; 4067 // Delete and insert new node
4068 4068 r.deleteContents();
4069 case '+': 4069 r.insertNode(t.getRng().createContextualFragment(h));
4070 ru.fullEnd = true; 4070
4071 break; 4071 // Move to caret marker
4072 4072 c = t.dom.get('__caret');
4073 case '#': 4073
4074 ru.padd = true; 4074 // Make sure we wrap it compleatly, Opera fails with a simple select call
4075 break; 4075 r = d.createRange();
4076 4076 r.setStartBefore(c);
4077 default: 4077 r.setEndAfter(c);
4078 x = 0; 4078 t.setRng(r);
4079 } 4079
4080 4080 // Delete the marker, and hopefully the caret gets placed in the right location
4081 tn[i] = s = s.substring(x); 4081 // Removed this since it seems to remove &nbsp; in FF and simply deleting it
4082 t.validElements[s] = 1; 4082 // doesn't seem to affect the caret position in any browser
4083 4083 //d.execCommand('Delete', false, null);
4084 // Add element name or element regex 4084
4085 if (/[*.?]/.test(tn[0])) { 4085 // Remove the caret position
4086 ru.nameRE = new RegExp('^' + wildcardToRE(tn[0]) + '$'); 4086 t.dom.remove('__caret');
4087 t.wildRules = t.wildRules || {}; 4087 } else {
4088 t.wildRules.push(ru); 4088 if (r.item) {
4089 } else { 4089 // Delete content and get caret text selection
4090 ru.name = tn[0]; 4090 d.execCommand('Delete', false, null);
4091 4091 r = t.getRng();
4092 // Store away default rule 4092 }
4093 if (tn[0] == '@') 4093
4094 dr = ru; 4094 r.pasteHTML(h);
4095 4095 }
4096 t.rules[s] = ru; 4096
4097 } 4097 // Dispatch set content event
4098 4098 t.onSetContent.dispatch(t, s);
4099 ru.attribs = at; 4099 },
4100 4100
4101 if (ra) 4101 getStart : function() {
4102 ru.requiredAttribs = ra; 4102 var t = this, r = t.getRng(), e;
4103 4103
4104 if (wat) { 4104 if (isIE) {
4105 // Build valid attributes regexp 4105 if (r.item)
4106 s = ''; 4106 return r.item(0);
4107 each(va, function(v) { 4107
4108 if (s) 4108 r = r.duplicate();
4109 s += '|'; 4109 r.collapse(1);
4110 4110 e = r.parentElement();
4111 s += '(' + wildcardToRE(v) + ')'; 4111
4112 }); 4112 if (e && e.nodeName == 'BODY')
4113 ru.validAttribsRE = new RegExp('^' + s.toLowerCase() + '$'); 4113 return e.firstChild;
4114 ru.wildAttribs = wat; 4114
4115 } 4115 return e;
4116 }); 4116 } else {
4117 }); 4117 e = r.startContainer;
4118 4118
4119 // Build valid elements regexp 4119 if (e.nodeName == 'BODY')
4120 s = ''; 4120 return e.firstChild;
4121 each(t.validElements, function(v, k) { 4121
4122 if (s) 4122 return t.dom.getParent(e, '*');
4123 s += '|'; 4123 }
4124 4124 },
4125 if (k != '@') 4125
4126 s += k; 4126 getEnd : function() {
4127 }); 4127 var t = this, r = t.getRng(), e;
4128 t.validElementsRE = new RegExp('^(' + wildcardToRE(s.toLowerCase()) + ')$'); 4128
4129 4129 if (isIE) {
4130 //console.debug(t.validElementsRE.toString()); 4130 if (r.item)
4131 //console.dir(t.rules); 4131 return r.item(0);
4132 //console.dir(t.wildRules); 4132
4133 }, 4133 r = r.duplicate();
4134 4134 r.collapse(0);
4135 findRule : function(n) { 4135 e = r.parentElement();
4136 var t = this, rl = t.rules, i, r; 4136
4137 4137 if (e && e.nodeName == 'BODY')
4138 t._setup(); 4138 return e.lastChild;
4139 4139
4140 // Exact match 4140 return e;
4141 r = rl[n]; 4141 } else {
4142 if (r) 4142 e = r.endContainer;
4143 return r; 4143
4144 4144 if (e.nodeName == 'BODY')
4145 // Try wildcards 4145 return e.lastChild;
4146 rl = t.wildRules; 4146
4147 for (i = 0; i < rl.length; i++) { 4147 return t.dom.getParent(e, '*');
4148 if (rl[i].nameRE.test(n)) 4148 }
4149 return rl[i]; 4149 },
4150 } 4150
4151 4151 getBookmark : function(si) {
4152 return null; 4152 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;
4153 }, 4153 sx = vp.x;
4154 4154 sy = vp.y;
4155 findAttribRule : function(ru, n) { 4155
4156 var i, wa = ru.wildAttribs; 4156 // Simple bookmark fast but not as persistent
4157 4157 if (si)
4158 for (i = 0; i < wa.length; i++) { 4158 return {rng : r, scrollX : sx, scrollY : sy};
4159 if (wa[i].nameRE.test(n)) 4159
4160 return wa[i]; 4160 // Handle IE
4161 } 4161 if (isIE) {
4162 4162 // Control selection
4163 return null; 4163 if (r.item) {
4164 }, 4164 e = r.item(0);
4165 4165
4166 serialize : function(n, o) { 4166 each(t.dom.select(e.nodeName), function(n, i) {
4167 var h, t = this; 4167 if (e == n) {
4168 4168 sp = i;
4169 t._setup(); 4169 return false;
4170 o = o || {}; 4170 }
4171 o.format = o.format || 'html'; 4171 });
4172 t.processObj = o; 4172
4173 n = n.cloneNode(true); 4173 return {
4174 t.key = '' + (parseInt(t.key) + 1); 4174 tag : e.nodeName,
4175 4175 index : sp,
4176 // Pre process 4176 scrollX : sx,
4177 if (!o.no_events) { 4177 scrollY : sy
4178 o.node = n; 4178 };
4179 t.onPreProcess.dispatch(t, o); 4179 }
4180 } 4180
4181 4181 // Text selection
4182 // Serialize HTML DOM into a string 4182 tr = t.dom.doc.body.createTextRange();
4183 t.writer.reset(); 4183 tr.moveToElementText(ro);
4184 t._serializeNode(n, o.getInner); 4184 tr.collapse(true);
4185 4185 bp = Math.abs(tr.move('character', c));
4186 // Post process 4186
4187 o.content = t.writer.getContent(); 4187 tr = r.duplicate();
4188 4188 tr.collapse(true);
4189 if (!o.no_events) 4189 sp = Math.abs(tr.move('character', c));
4190 t.onPostProcess.dispatch(t, o); 4190
4191 4191 tr = r.duplicate();
4192 t._postProcess(o); 4192 tr.collapse(false);
4193 o.node = null; 4193 le = Math.abs(tr.move('character', c)) - sp;
4194 4194
4195 return tinymce.trim(o.content); 4195 return {
4196 }, 4196 start : sp - bp,
4197 4197 length : le,
4198 // Internal functions 4198 scrollX : sx,
4199 4199 scrollY : sy
4200 _postProcess : function(o) { 4200 };
4201 var t = this, s = t.settings, h = o.content, sc = [], p; 4201 }
4202 4202
4203 if (o.format == 'html') { 4203 // Handle W3C
4204 // Protect some elements 4204 e = t.getNode();
4205 p = t._protect({ 4205 s = t.getSel();
4206 content : h, 4206
4207 patterns : [ 4207 if (!s)
4208 {pattern : /(<script[^>]*>)(.*?)(<\/script>)/g}, 4208 return null;
4209 {pattern : /(<style[^>]*>)(.*?)(<\/style>)/g}, 4209
4210 {pattern : /(<pre[^>]*>)(.*?)(<\/pre>)/g, encode : 1}, 4210 // Image selection
4211 {pattern : /(<!--\[CDATA\[)(.*?)(\]\]-->)/g} 4211 if (e && e.nodeName == 'IMG') {
4212 ] 4212 return {
4213 }); 4213 scrollX : sx,
4214 4214 scrollY : sy
4215 h = p.content; 4215 };
4216 4216 }
4217 // Entity encode 4217
4218 if (s.entity_encoding !== 'raw') 4218 // Text selection
4219 h = t._encode(h); 4219
4220 4220 function getPos(r, sn, en) {
4221 // Use BR instead of &nbsp; padded P elements inside editor and use <p>&nbsp;</p> outside editor 4221 var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {};
4222/* if (o.set) 4222
4223 h = h.replace(/<p>\s+(&nbsp;|&#160;|\u00a0|<br \/>)\s+<\/p>/g, '<p><br /></p>'); 4223 while ((n = w.nextNode()) != null) {
4224 else 4224 if (n == sn)
4225 h = h.replace(/<p>\s+(&nbsp;|&#160;|\u00a0|<br \/>)\s+<\/p>/g, '<p>$1</p>');*/ 4225 d.start = p;
4226 4226
4227 // Since Gecko and Safari keeps whitespace in the DOM we need to 4227 if (n == en) {
4228 // remove it inorder to match other browsers. But I think Gecko and Safari is right. 4228 d.end = p;
4229 // This process is only done when getting contents out from the editor. 4229 return d;
4230 if (!o.set) { 4230 }
4231 // We need to replace paragraph whitespace with an nbsp before indentation to keep the \u00a0 char 4231
4232 h = h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g, s.entity_encoding == 'numeric' ? '<p$1>&#160;</p>' : '<p$1>&nbsp;</p>'); 4232 p += trimNl(n.nodeValue || '').length;
4233 4233 }
4234 if (s.remove_linebreaks) { 4234
4235 h = h.replace(/\r?\n|\r/g, ' '); 4235 return null;
4236 h = h.replace(/(<[^>]+>)\s+/g, '$1 '); 4236 };
4237 h = h.replace(/\s+(<\/[^>]+>)/g, ' $1'); 4237
4238 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>'); // Trim block start 4238 // Caret or selection
4239 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>'); // Trim block start 4239 if (s.anchorNode == s.focusNode && s.anchorOffset == s.focusOffset) {
4240 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>'); // Trim block end 4240 e = getPos(ro, s.anchorNode, s.focusNode);
4241 } 4241
4242 4242 if (!e)
4243 // Simple indentation 4243 return {scrollX : sx, scrollY : sy};
4244 if (s.apply_source_formatting && s.indent_mode == 'simple') { 4244
4245 // Add line breaks before and after block elements 4245 // Count whitespace before
4246 h = h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g, '\n<$1$2$3>\n'); 4246 trimNl(s.anchorNode.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;});
4247 h = h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g, '\n<$1$2>'); 4247
4248 h = h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g, '</$1>\n'); 4248 return {
4249 h = h.replace(/\n\n/g, '\n'); 4249 start : Math.max(e.start + s.anchorOffset - wb, 0),
4250 } 4250 end : Math.max(e.end + s.focusOffset - wb, 0),
4251 } 4251 scrollX : sx,
4252 4252 scrollY : sy,
4253 h = t._unprotect(h, p); 4253 beg : s.anchorOffset - wb == 0
4254 4254 };
4255 // Restore CDATA sections 4255 } else {
4256 h = h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g, '<![CDATA[$1]]>'); 4256 e = getPos(ro, r.startContainer, r.endContainer);
4257 4257
4258 // Restore the \u00a0 character if raw mode is enabled 4258 // Count whitespace before start and end container
4259 if (s.entity_encoding == 'raw') 4259 //(r.startContainer.nodeValue || '').replace(/^\s+/, function(a) {wb = a.length;});
4260 h = h.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g, '<p$1>\u00a0</p>'); 4260 //(r.endContainer.nodeValue || '').replace(/^\s+/, function(a) {wa = a.length;});
4261 } 4261
4262 4262 if (!e)
4263 o.content = h; 4263 return {scrollX : sx, scrollY : sy};
4264 }, 4264
4265 4265 return {
4266 _serializeNode : function(n, inn) { 4266 start : Math.max(e.start + r.startOffset - wb, 0),
4267 var t = this, s = t.settings, w = t.writer, hc, el, cn, i, l, a, at, no, v, nn, ru, ar, iv; 4267 end : Math.max(e.end + r.endOffset - wa, 0),
4268 4268 scrollX : sx,
4269 if (!s.node_filter || s.node_filter(n)) { 4269 scrollY : sy,
4270 switch (n.nodeType) { 4270 beg : r.startOffset - wb == 0
4271 case 1: // Element 4271 };
4272 if (n.hasAttribute ? n.hasAttribute('mce_bogus') : n.getAttribute('mce_bogus')) 4272 }
4273 return; 4273 },
4274 4274
4275 iv = false; 4275 moveToBookmark : function(b) {
4276 hc = n.hasChildNodes(); 4276 var t = this, r = t.getRng(), s = t.getSel(), ro = t.dom.getRoot(), sd, nvl, nv;
4277 nn = n.getAttribute('mce_name') || n.nodeName.toLowerCase(); 4277
4278 4278 function getPos(r, sp, ep) {
4279 // Add correct prefix on IE 4279 var w = t.dom.doc.createTreeWalker(r, NodeFilter.SHOW_TEXT, null, false), n, p = 0, d = {}, o, v, wa, wb;
4280 if (isIE) { 4280
4281 if (n.scopeName !== 'HTML' && n.scopeName !== 'html') 4281 while ((n = w.nextNode()) != null) {
4282 nn = n.scopeName + ':' + nn; 4282 wa = wb = 0;
4283 } 4283
4284 4284 nv = n.nodeValue || '';
4285 // Remove mce prefix on IE needed for the abbr element 4285 //nv.replace(/^\s+[^\s]/, function(a) {wb = a.length - 1;});
4286 if (nn.indexOf('mce:') === 0) 4286 //nv.replace(/[^\s]\s+$/, function(a) {wa = a.length - 1;});
4287 nn = nn.substring(4); 4287
4288 4288 nvl = trimNl(nv).length;
4289 // Check if valid 4289 p += nvl;
4290 if (!t.validElementsRE.test(nn) || (t.invalidElementsRE && t.invalidElementsRE.test(nn)) || inn) { 4290
4291 iv = true; 4291 if (p >= sp && !d.startNode) {
4292 break; 4292 o = sp - (p - nvl);
4293 } 4293
4294 4294 // Fix for odd quirk in FF
4295 if (isIE) { 4295 if (b.beg && o >= nvl)
4296 // Fix IE content duplication (DOM can have multiple copies of the same node) 4296 continue;
4297 if (s.fix_content_duplication) { 4297
4298 if (n.mce_serialized == t.key) 4298 d.startNode = n;
4299 return; 4299 d.startOffset = o + wb;
4300 4300 }
4301 n.mce_serialized = t.key; 4301
4302 } 4302 if (p >= ep) {
4303 4303 d.endNode = n;
4304 // IE sometimes adds a / infront of the node name 4304 d.endOffset = ep - (p - nvl) + wb;
4305 if (nn.charAt(0) == '/') 4305 return d;
4306 nn = nn.substring(1); 4306 }
4307 } else if (isGecko) { 4307 }
4308 // Ignore br elements 4308
4309 if (n.nodeName === 'BR' && n.getAttribute('type') == '_moz') 4309 return null;
4310 return; 4310 };
4311 } 4311
4312 4312 if (!b)
4313 // Check if valid child 4313 return false;
4314 if (t.childRules) { 4314
4315 if (t.parentElementsRE.test(t.elementName)) { 4315 t.win.scrollTo(b.scrollX, b.scrollY);
4316 if (!t.childRules[t.elementName].test(nn)) { 4316
4317 iv = true; 4317 // Handle explorer
4318 break; 4318 if (isIE) {
4319 } 4319 // Handle simple
4320 } 4320 if (r = b.rng) {
4321 4321 try {
4322 t.elementName = nn; 4322 r.select();
4323 } 4323 } catch (ex) {
4324 4324 // Ignore
4325 ru = t.findRule(nn); 4325 }
4326 nn = ru.name || nn; 4326
4327 4327 return true;
4328 // Skip empty nodes or empty node name in IE 4328 }
4329 if ((!hc && ru.noEmpty) || (isIE && !nn)) { 4329
4330 iv = true; 4330 t.win.focus();
4331 break; 4331
4332 } 4332 // Handle control bookmark
4333 4333 if (b.tag) {
4334 // Check required 4334 r = ro.createControlRange();
4335 if (ru.requiredAttribs) { 4335
4336 a = ru.requiredAttribs; 4336 each(t.dom.select(b.tag), function(n, i) {
4337 4337 if (i == b.index)
4338 for (i = a.length - 1; i >= 0; i--) { 4338 r.addElement(n);
4339 if (this.dom.getAttrib(n, a[i]) !== '') 4339 });
4340 break; 4340 } else {
4341 } 4341 // Try/catch needed since this operation breaks when TinyMCE is placed in hidden divs/tabs
4342 4342 try {
4343 // None of the required was there 4343 // Incorrect bookmark
4344 if (i == -1) { 4344 if (b.start < 0)
4345 iv = true; 4345 return true;
4346 break; 4346
4347 } 4347 r = s.createRange();
4348 } 4348 r.moveToElementText(ro);
4349 4349 r.collapse(true);
4350 w.writeStartElement(nn); 4350 r.moveStart('character', b.start);
4351 4351 r.moveEnd('character', b.length);
4352 // Add ordered attributes 4352 } catch (ex2) {
4353 if (ru.attribs) { 4353 return true;
4354 for (i=0, at = ru.attribs, l = at.length; i<l; i++) { 4354 }
4355 a = at[i]; 4355 }
4356 v = t._getAttrib(n, a); 4356
4357 4357 try {
4358 if (v !== null) 4358 r.select();
4359 w.writeAttribute(a.name, v); 4359 } catch (ex) {
4360 } 4360 // Needed for some odd IE bug #1843306
4361 } 4361 }
4362 4362
4363 // Add wild attributes 4363 return true;
4364 if (ru.validAttribsRE) { 4364 }
4365 at = isIE ? getIEAtts(n) : n.attributes; 4365
4366 for (i=at.length-1; i>-1; i--) { 4366 // Handle W3C
4367 no = at[i]; 4367 if (!s)
4368 4368 return false;
4369 if (no.specified) { 4369
4370 a = no.nodeName.toLowerCase(); 4370 // Handle simple
4371 4371 if (b.rng) {
4372 if (s.invalid_attrs.test(a) || !ru.validAttribsRE.test(a)) 4372 s.removeAllRanges();
4373 continue; 4373 s.addRange(b.rng);
4374 4374 } else {
4375 ar = t.findAttribRule(ru, a); 4375 if (is(b.start) && is(b.end)) {
4376 v = t._getAttrib(n, ar, a); 4376 try {
4377 4377 sd = getPos(ro, b.start, b.end);
4378 if (v !== null) 4378
4379 w.writeAttribute(a, v); 4379 if (sd) {
4380 } 4380 r = t.dom.doc.createRange();
4381 } 4381 r.setStart(sd.startNode, sd.startOffset);
4382 } 4382 r.setEnd(sd.endNode, sd.endOffset);
4383 4383 s.removeAllRanges();
4384 // Padd empty nodes with a &nbsp; 4384 s.addRange(r);
4385 if (ru.padd) { 4385 }
4386 // If it has only one bogus child, padd it anyway workaround for <td><br /></td> bug 4386
4387 if (hc && (cn = n.firstChild) && cn.nodeType === 1 && n.childNodes.length === 1) { 4387 if (!tinymce.isOpera)
4388 if (cn.hasAttribute ? cn.hasAttribute('mce_bogus') : cn.getAttribute('mce_bogus')) 4388 t.win.focus();
4389 w.writeText('\u00a0'); 4389 } catch (ex) {
4390 } else if (!hc) 4390 // Ignore
4391 w.writeText('\u00a0'); // No children then padd it 4391 }
4392 } 4392 }
4393 4393 }
4394 break; 4394 },
4395 4395
4396 case 3: // Text 4396 select : function(n, c) {
4397 // Check if valid child 4397 var t = this, r = t.getRng(), s = t.getSel(), b, fn, ln, d = t.win.document;
4398 if (t.childRules && t.parentElementsRE.test(t.elementName)) { 4398
4399 if (!t.childRules[t.elementName].test(n.nodeName)) 4399 function find(n, start) {
4400 return; 4400 var walker, o;
4401 } 4401
4402 4402 if (n) {
4403 return w.writeText(n.nodeValue); 4403 walker = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
4404 4404
4405 case 4: // CDATA 4405 // Find first/last non empty text node
4406 return w.writeCDATA(n.nodeValue); 4406 while (n = walker.nextNode()) {
4407 4407 o = n;
4408 case 8: // Comment 4408
4409 return w.writeComment(n.nodeValue); 4409 if (tinymce.trim(n.nodeValue).length != 0) {
4410 } 4410 if (start)
4411 } else if (n.nodeType == 1) 4411 return n;
4412 hc = n.hasChildNodes(); 4412 else
4413 4413 o = n;
4414 if (hc) { 4414 }
4415 cn = n.firstChild; 4415 }
4416 4416 }
4417 while (cn) { 4417
4418 t._serializeNode(cn); 4418 return o;
4419 t.elementName = nn; 4419 };
4420 cn = cn.nextSibling; 4420
4421 } 4421 if (isIE) {
4422 } 4422 try {
4423 4423 b = d.body;
4424 // Write element end 4424
4425 if (!iv) { 4425 if (/^(IMG|TABLE)$/.test(n.nodeName)) {
4426 if (hc || !s.closed.test(nn)) 4426 r = b.createControlRange();
4427 w.writeFullEndElement(); 4427 r.addElement(n);
4428 else 4428 } else {
4429 w.writeEndElement(); 4429 r = b.createTextRange();
4430 } 4430 r.moveToElementText(n);
4431 }, 4431 }
4432 4432
4433 _protect : function(o) { 4433 r.select();
4434 var t = this; 4434 } catch (ex) {
4435 4435 // Throws illigal agrument in IE some times
4436 o.items = o.items || []; 4436 }
4437 4437 } else {
4438 function enc(s) { 4438 if (c) {
4439 return s.replace(/[\r\n\\]/g, function(c) { 4439 fn = find(n, 1) || t.dom.select('br:first', n)[0];
4440 if (c === '\n') 4440 ln = find(n, 0) || t.dom.select('br:last', n)[0];
4441 return '\\n'; 4441
4442 else if (c === '\\') 4442 if (fn && ln) {
4443 return '\\\\'; 4443 r = d.createRange();
4444 4444
4445 return '\\r'; 4445 if (fn.nodeName == 'BR')
4446 }); 4446 r.setStartBefore(fn);
4447 }; 4447 else
4448 4448 r.setStart(fn, 0);
4449 function dec(s) { 4449
4450 return s.replace(/\\[\\rn]/g, function(c) { 4450 if (ln.nodeName == 'BR')
4451 if (c === '\\n') 4451 r.setEndBefore(ln);
4452 return '\n'; 4452 else
4453 else if (c === '\\\\') 4453 r.setEnd(ln, ln.nodeValue.length);
4454 return '\\'; 4454 } else
4455 4455 r.selectNode(n);
4456 return '\r'; 4456 } else
4457 }); 4457 r.selectNode(n);
4458 }; 4458
4459 4459 t.setRng(r);
4460 each(o.patterns, function(p) { 4460 }
4461 o.content = dec(enc(o.content).replace(p.pattern, function(x, a, b, c) { 4461
4462 b = dec(b); 4462 return n;
4463 4463 },
4464 if (p.encode) 4464
4465 b = t._encode(b); 4465 isCollapsed : function() {
4466 4466 var t = this, r = t.getRng(), s = t.getSel();
4467 o.items.push(b); 4467
4468 return a + '<!--mce:' + (o.items.length - 1) + '-->' + c; 4468 if (!r || r.item)
4469 })); 4469 return false;
4470 }); 4470
4471 4471 return !s || r.boundingWidth == 0 || r.collapsed;
4472 return o; 4472 },
4473 }, 4473
4474 4474 collapse : function(b) {
4475 _unprotect : function(h, o) { 4475 var t = this, r = t.getRng(), n;
4476 h = h.replace(/\<!--mce:([0-9]+)--\>/g, function(a, b) { 4476
4477 return o.items[parseInt(b)]; 4477 // Control range on IE
4478 }); 4478 if (r.item) {
4479 4479 n = r.item(0);
4480 o.items = []; 4480 r = this.win.document.body.createTextRange();
4481 4481 r.moveToElementText(n);
4482 return h; 4482 }
4483 }, 4483
4484 4484 r.collapse(!!b);
4485 _encode : function(h) { 4485 t.setRng(r);
4486 var t = this, s = t.settings, l; 4486 },
4487 4487
4488 // Entity encode 4488 getSel : function() {
4489 if (s.entity_encoding !== 'raw') { 4489 var t = this, w = this.win;
4490 if (s.entity_encoding.indexOf('named') != -1) { 4490
4491 t.setEntities(s.entities); 4491 return w.getSelection ? w.getSelection() : w.document.selection;
4492 l = t.entityLookup; 4492 },
4493 4493
4494 h = h.replace(t.entitiesRE, function(a) { 4494 getRng : function(w3c) {
4495 var v; 4495 var t = this, s, r;
4496 4496
4497 if (v = l[a]) 4497 // Found tridentSel object then we need to use that one
4498 a = '&' + v + ';'; 4498 if (w3c && t.tridentSel)
4499 4499 return t.tridentSel.getRangeAt(0);
4500 return a; 4500
4501 }); 4501 try {
4502 } 4502 if (s = t.getSel())
4503 4503 r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : t.win.document.createRange());
4504 if (s.entity_encoding.indexOf('numeric') != -1) { 4504 } catch (ex) {
4505 h = h.replace(/[\u007E-\uFFFF]/g, function(a) { 4505 // IE throws unspecified error here if TinyMCE is placed in a frame/iframe
4506 return '&#' + a.charCodeAt(0) + ';'; 4506 }
4507 }); 4507
4508 } 4508 // No range found then create an empty one
4509 } 4509 // This can occur when the editor is placed in a hidden container element on Gecko
4510 4510 // Or on IE when there was an exception
4511 return h; 4511 if (!r)
4512 }, 4512 r = isIE ? t.win.document.body.createTextRange() : t.win.document.createRange();
4513 4513
4514 _setup : function() { 4514 return r;
4515 var t = this, s = this.settings; 4515 },
4516 4516
4517 if (t.done) 4517 setRng : function(r) {
4518 return; 4518 var s, t = this;
4519 4519
4520 t.done = 1; 4520 if (!t.tridentSel) {
4521 4521 s = t.getSel();
4522 t.setRules(s.valid_elements); 4522
4523 t.addRules(s.extended_valid_elements); 4523 if (s) {
4524 t.addValidChildRules(s.valid_child_elements); 4524 s.removeAllRanges();
4525 4525 s.addRange(r);
4526 if (s.invalid_elements) 4526 }
4527 t.invalidElementsRE = new RegExp('^(' + wildcardToRE(s.invalid_elements.replace(/,/g, '|').toLowerCase()) + ')$'); 4527 } else {
4528 4528 // Is W3C Range
4529 if (s.attrib_value_filter) 4529 if (r.cloneRange) {
4530 t.attribValueFilter = s.attribValueFilter; 4530 t.tridentSel.addRange(r);
4531 }, 4531 return;
4532 4532 }
4533 _getAttrib : function(n, a, na) { 4533
4534 var i, v; 4534 // Is IE specific range
4535 4535 try {
4536 na = na || a.name; 4536 r.select();
4537 4537 } catch (ex) {
4538 if (a.forcedVal && (v = a.forcedVal)) { 4538 // Needed for some odd IE bug #1843306
4539 if (v === '{$uid}') 4539 }
4540 return this.dom.uniqueId(); 4540 }
4541 4541 },
4542 return v; 4542
4543 } 4543 setNode : function(n) {
4544 4544 var t = this;
4545 v = this.dom.getAttrib(n, na); 4545
4546 4546 t.setContent(t.dom.getOuterHTML(n));
4547 // Bool attr 4547
4548 if (this.settings.bool_attrs.test(na) && v) { 4548 return n;
4549 v = ('' + v).toLowerCase(); 4549 },
4550 4550
4551 if (v === 'false' || v === '0') 4551 getNode : function() {
4552 return null; 4552 var t = this, r = t.getRng(), s = t.getSel(), e;
4553 4553
4554 v = na; 4554 if (!isIE) {
4555 } 4555 // Range maybe lost after the editor is made visible again
4556 4556 if (!r)
4557 switch (na) { 4557 return t.dom.getRoot();
4558 case 'rowspan': 4558
4559 case 'colspan': 4559 e = r.commonAncestorContainer;
4560 // Whats the point? Remove usless attribute value 4560
4561 if (v == '1') 4561 // Handle selection a image or other control like element such as anchors
4562 v = ''; 4562 if (!r.collapsed) {
4563 4563 // If the anchor node is a element instead of a text node then return this element
4564 break; 4564 if (tinymce.isWebKit && s.anchorNode && s.anchorNode.nodeType == 1)
4565 } 4565 return s.anchorNode.childNodes[s.anchorOffset];
4566 4566
4567 if (this.attribValueFilter) 4567 if (r.startContainer == r.endContainer) {
4568 v = this.attribValueFilter(na, v, n); 4568 if (r.startOffset - r.endOffset < 2) {
4569 4569 if (r.startContainer.hasChildNodes())
4570 if (a.validVals) { 4570 e = r.startContainer.childNodes[r.startOffset];
4571 for (i = a.validVals.length - 1; i >= 0; i--) { 4571 }
4572 if (v == a.validVals[i]) 4572 }
4573 break; 4573 }
4574 } 4574
4575 4575 return t.dom.getParent(e, '*');
4576 if (i == -1) 4576 }
4577 return null; 4577
4578 } 4578 return r.item ? r.item(0) : r.parentElement();
4579 4579 },
4580 if (v === '' && typeof(a.defaultVal) != 'undefined') { 4580
4581 v = a.defaultVal; 4581 getSelectedBlocks : function(st, en) {
4582 4582 var t = this, dom = t.dom, sb, eb, n, bl = [];
4583 if (v === '{$uid}') 4583
4584 return this.dom.uniqueId(); 4584 sb = dom.getParent(st || t.getStart(), dom.isBlock);
4585 4585 eb = dom.getParent(en || t.getEnd(), dom.isBlock);
4586 return v; 4586
4587 } else { 4587 if (sb)
4588 // Remove internal mceItemXX classes when content is extracted from editor 4588 bl.push(sb);
4589 if (na == 'class' && this.processObj.get) 4589
4590 v = v.replace(/\s?mceItem\w+\s?/g, ''); 4590 if (sb && eb && sb != eb) {
4591 } 4591 n = sb;
4592 4592
4593 if (v === '') 4593 while ((n = n.nextSibling) && n != eb) {
4594 return null; 4594 if (dom.isBlock(n))
4595 4595 bl.push(n);
4596 4596 }
4597 return v; 4597 }
4598 } 4598
4599 4599 if (eb && sb != eb)
4600 }); 4600 bl.push(eb);
4601})(); 4601
4602 4602 return bl;
4603/* file:jscripts/tiny_mce/classes/dom/ScriptLoader.js */ 4603 },
4604 4604
4605(function() { 4605 destroy : function(s) {
4606 var each = tinymce.each, Event = tinymce.dom.Event; 4606 var t = this;
4607 4607
4608 tinymce.create('tinymce.dom.ScriptLoader', { 4608 t.win = null;
4609 ScriptLoader : function(s) { 4609
4610 this.settings = s || {}; 4610 if (t.tridentSel)
4611 this.queue = []; 4611 t.tridentSel.destroy();
4612 this.lookup = {}; 4612
4613 }, 4613 // Manual destroy then remove unload handler
4614 4614 if (!s)
4615 isDone : function(u) { 4615 tinymce.removeUnload(t.destroy);
4616 return this.lookup[u] ? this.lookup[u].state == 2 : 0; 4616 }
4617 }, 4617 });
4618 4618})(tinymce);
4619 markDone : function(u) { 4619(function(tinymce) {
4620 this.lookup[u] = {state : 2, url : u}; 4620 tinymce.create('tinymce.dom.XMLWriter', {
4621 }, 4621 node : null,
4622 4622
4623 add : function(u, cb, s, pr) { 4623 XMLWriter : function(s) {
4624 var t = this, lo = t.lookup, o; 4624 // Get XML document
4625 4625 function getXML() {
4626 if (o = lo[u]) { 4626 var i = document.implementation;
4627 // Is loaded fire callback 4627
4628 if (cb && o.state == 2) 4628 if (!i || !i.createDocument) {
4629 cb.call(s || this); 4629 // Try IE objects
4630 4630 try {return new ActiveXObject('MSXML2.DOMDocument');} catch (ex) {}
4631 return o; 4631 try {return new ActiveXObject('Microsoft.XmlDom');} catch (ex) {}
4632 } 4632 } else
4633 4633 return i.createDocument('', '', null);
4634 o = {state : 0, url : u, func : cb, scope : s || this}; 4634 };
4635 4635
4636 if (pr) 4636 this.doc = getXML();
4637 t.queue.unshift(o); 4637
4638 else 4638 // Since Opera and WebKit doesn't escape > into &gt; we need to do it our self to normalize the output for all browsers
4639 t.queue.push(o); 4639 this.valid = tinymce.isOpera || tinymce.isWebKit;
4640 4640
4641 lo[u] = o; 4641 this.reset();
4642 4642 },
4643 return o; 4643
4644 }, 4644 reset : function() {
4645 4645 var t = this, d = t.doc;
4646 load : function(u, cb, s) { 4646
4647 var t = this, o; 4647 if (d.firstChild)
4648 4648 d.removeChild(d.firstChild);
4649 if (o = t.lookup[u]) { 4649
4650 // Is loaded fire callback 4650 t.node = d.appendChild(d.createElement("html"));
4651 if (cb && o.state == 2) 4651 },
4652 cb.call(s || t); 4652
4653 4653 writeStartElement : function(n) {
4654 return o; 4654 var t = this;
4655 } 4655
4656 4656 t.node = t.node.appendChild(t.doc.createElement(n));
4657 function loadScript(u) { 4657 },
4658 if (Event.domLoaded || t.settings.strict_mode) { 4658
4659 tinymce.util.XHR.send({ 4659 writeAttribute : function(n, v) {
4660 url : tinymce._addVer(u), 4660 if (this.valid)
4661 error : t.settings.error, 4661 v = v.replace(/>/g, '%MCGT%');
4662 async : false, 4662
4663 success : function(co) { 4663 this.node.setAttribute(n, v);
4664 t.eval(co); 4664 },
4665 } 4665
4666 }); 4666 writeEndElement : function() {
4667 } else 4667 this.node = this.node.parentNode;
4668 document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>'); 4668 },
4669 }; 4669
4670 4670 writeFullEndElement : function() {
4671 if (!tinymce.is(u, 'string')) { 4671 var t = this, n = t.node;
4672 each(u, function(u) { 4672
4673 loadScript(u); 4673 n.appendChild(t.doc.createTextNode(""));
4674 }); 4674 t.node = n.parentNode;
4675 4675 },
4676 if (cb) 4676
4677 cb.call(s || t); 4677 writeText : function(v) {
4678 } else { 4678 if (this.valid)
4679 loadScript(u); 4679 v = v.replace(/>/g, '%MCGT%');
4680 4680
4681 if (cb) 4681 this.node.appendChild(this.doc.createTextNode(v));
4682 cb.call(s || t); 4682 },
4683 } 4683
4684 }, 4684 writeCDATA : function(v) {
4685 4685 this.node.appendChild(this.doc.createCDATASection(v));
4686 loadQueue : function(cb, s) { 4686 },
4687 var t = this; 4687
4688 4688 writeComment : function(v) {
4689 if (!t.queueLoading) { 4689 // Fix for bug #2035694
4690 t.queueLoading = 1; 4690 if (tinymce.isIE)
4691 t.queueCallbacks = []; 4691 v = v.replace(/^\-|\-$/g, ' ');
4692 4692
4693 t.loadScripts(t.queue, function() { 4693 this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g, ' ')));
4694 t.queueLoading = 0; 4694 },
4695 4695
4696 if (cb) 4696 getContent : function() {
4697 cb.call(s || t); 4697 var h;
4698 4698
4699 each(t.queueCallbacks, function(o) { 4699 h = this.doc.xml || new XMLSerializer().serializeToString(this.doc);
4700 o.func.call(o.scope); 4700 h = h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g, '');
4701 }); 4701 h = h.replace(/ ?\/>/g, ' />');
4702 }); 4702
4703 } else if (cb) 4703 if (this.valid)
4704 t.queueCallbacks.push({func : cb, scope : s || t}); 4704 h = h.replace(/\%MCGT%/g, '&gt;');
4705 }, 4705
4706 4706 return h;
4707 eval : function(co) { 4707 }
4708 var w = window; 4708 });
4709 4709})(tinymce);
4710 // Evaluate script 4710(function(tinymce) {
4711 if (!w.execScript) { 4711 tinymce.create('tinymce.dom.StringWriter', {
4712 try { 4712 str : null,
4713 eval.call(w, co); 4713 tags : null,
4714 } catch (ex) { 4714 count : 0,
4715 eval(co, w); // Firefox 3.0a8 4715 settings : null,
4716 } 4716 indent : null,
4717 } else 4717
4718 w.execScript(co); // IE 4718 StringWriter : function(s) {
4719 }, 4719 this.settings = tinymce.extend({
4720 4720 indent_char : ' ',
4721 loadScripts : function(sc, cb, s) { 4721 indentation : 0
4722 var t = this, lo = t.lookup; 4722 }, s);
4723 4723
4724 function done(o) { 4724 this.reset();
4725 o.state = 2; // Has been loaded 4725 },
4726 4726
4727 // Run callback 4727 reset : function() {
4728 if (o.func) 4728 this.indent = '';
4729 o.func.call(o.scope || t); 4729 this.str = "";
4730 }; 4730 this.tags = [];
4731 4731 this.count = 0;
4732 function allDone() { 4732 },
4733 var l; 4733
4734 4734 writeStartElement : function(n) {
4735 // Check if all files are loaded 4735 this._writeAttributesEnd();
4736 l = sc.length; 4736 this.writeRaw('<' + n);
4737 each(sc, function(o) { 4737 this.tags.push(n);
4738 o = lo[o.url]; 4738 this.inAttr = true;
4739 4739 this.count++;
4740 if (o.state === 2) {// It has finished loading 4740 this.elementCount = this.count;
4741 done(o); 4741 },
4742 l--; 4742
4743 } else 4743 writeAttribute : function(n, v) {
4744 load(o); 4744 var t = this;
4745 }); 4745
4746 4746 t.writeRaw(" " + t.encode(n) + '="' + t.encode(v) + '"');
4747 // They are all loaded 4747 },
4748 if (l === 0 && cb) { 4748
4749 cb.call(s || t); 4749 writeEndElement : function() {
4750 cb = 0; 4750 var n;
4751 } 4751
4752 }; 4752 if (this.tags.length > 0) {
4753 4753 n = this.tags.pop();
4754 function load(o) { 4754
4755 if (o.state > 0) 4755 if (this._writeAttributesEnd(1))
4756 return; 4756 this.writeRaw('</' + n + '>');
4757 4757
4758 o.state = 1; // Is loading 4758 if (this.settings.indentation > 0)
4759 4759 this.writeRaw('\n');
4760 tinymce.dom.ScriptLoader.loadScript(o.url, function() { 4760 }
4761 done(o); 4761 },
4762 allDone(); 4762
4763 }); 4763 writeFullEndElement : function() {
4764 4764 if (this.tags.length > 0) {
4765 /* 4765 this._writeAttributesEnd();
4766 tinymce.util.XHR.send({ 4766 this.writeRaw('</' + this.tags.pop() + '>');
4767 url : o.url, 4767
4768 error : t.settings.error, 4768 if (this.settings.indentation > 0)
4769 success : function(co) { 4769 this.writeRaw('\n');
4770 t.eval(co); 4770 }
4771 done(o); 4771 },
4772 allDone(); 4772
4773 } 4773 writeText : function(v) {
4774 }); 4774 this._writeAttributesEnd();
4775 */ 4775 this.writeRaw(this.encode(v));
4776 }; 4776 this.count++;
4777 4777 },
4778 each(sc, function(o) { 4778
4779 var u = o.url; 4779 writeCDATA : function(v) {
4780 4780 this._writeAttributesEnd();
4781 // Add to queue if needed 4781 this.writeRaw('<![CDATA[' + v + ']]>');
4782 if (!lo[u]) { 4782 this.count++;
4783 lo[u] = o; 4783 },
4784 t.queue.push(o); 4784
4785 } else 4785 writeComment : function(v) {
4786 o = lo[u]; 4786 this._writeAttributesEnd();
4787 4787 this.writeRaw('<!-- ' + v + '-->');
4788 // Is already loading or has been loaded 4788 this.count++;
4789 if (o.state > 0) 4789 },
4790 return; 4790
4791 4791 writeRaw : function(v) {
4792 if (!Event.domLoaded && !t.settings.strict_mode) { 4792 this.str += v;
4793 var ix, ol = ''; 4793 },
4794 4794
4795 // Add onload events 4795 encode : function(s) {
4796 if (cb || o.func) { 4796 return s.replace(/[<>&"]/g, function(v) {
4797 o.state = 1; // Is loading 4797 switch (v) {
4798 4798 case '<':
4799 ix = tinymce.dom.ScriptLoader._addOnLoad(function() { 4799 return '&lt;';
4800 done(o); 4800
4801 allDone(); 4801 case '>':
4802 }); 4802 return '&gt;';
4803 4803
4804 if (tinymce.isIE) 4804 case '&':
4805 ol = ' onreadystatechange="'; 4805 return '&amp;';
4806 else 4806
4807 ol = ' onload="'; 4807 case '"':
4808 4808 return '&quot;';
4809 ol += 'tinymce.dom.ScriptLoader._onLoad(this,\'' + u + '\',' + ix + ');"'; 4809 }
4810 } 4810
4811 4811 return v;
4812 document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"' + ol + '></script>'); 4812 });
4813 4813 },
4814 if (!o.func) 4814
4815 done(o); 4815 getContent : function() {
4816 } else 4816 return this.str;
4817 load(o); 4817 },
4818 }); 4818
4819 4819 _writeAttributesEnd : function(s) {
4820 allDone(); 4820 if (!this.inAttr)
4821 }, 4821 return;
4822 4822
4823 // Static methods 4823 this.inAttr = false;
4824 'static' : { 4824
4825 _addOnLoad : function(f) { 4825 if (s && this.elementCount == this.count) {
4826 var t = this; 4826 this.writeRaw(' />');
4827 4827 return false;
4828 t._funcs = t._funcs || []; 4828 }
4829 t._funcs.push(f); 4829
4830 4830 this.writeRaw('>');
4831 return t._funcs.length - 1; 4831
4832 }, 4832 return true;
4833 4833 }
4834 _onLoad : function(e, u, ix) { 4834 });
4835 if (!tinymce.isIE || e.readyState == 'complete') 4835})(tinymce);
4836 this._funcs[ix].call(this); 4836(function(tinymce) {
4837 }, 4837 // Shorten names
4838 4838 var extend = tinymce.extend, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, isIE = tinymce.isIE, isGecko = tinymce.isGecko;
4839 loadScript : function(u, cb) { 4839
4840 var id = tinymce.DOM.uniqueId(), e; 4840 function wildcardToRE(s) {
4841 4841 return s.replace(/([?+*])/g, '.$1');
4842 function done() { 4842 };
4843 Event.clear(id); 4843
4844 tinymce.DOM.remove(id); 4844 tinymce.create('tinymce.dom.Serializer', {
4845 4845 Serializer : function(s) {
4846 if (cb) { 4846 var t = this;
4847 cb.call(document, u); 4847
4848 cb = 0; 4848 t.key = 0;
4849 } 4849 t.onPreProcess = new Dispatcher(t);
4850 }; 4850 t.onPostProcess = new Dispatcher(t);
4851 4851
4852 if (tinymce.isIE) { 4852 try {
4853/* Event.add(e, 'readystatechange', function(e) { 4853 t.writer = new tinymce.dom.XMLWriter();
4854 if (e.target && e.target.readyState == 'complete') 4854 } catch (ex) {
4855 done(); 4855 // IE might throw exception if ActiveX is disabled so we then switch to the slightly slower StringWriter
4856 });*/ 4856 t.writer = new tinymce.dom.StringWriter();
4857 4857 }
4858 tinymce.util.XHR.send({ 4858
4859 url : tinymce._addVer(u), 4859 // Default settings
4860 async : false, 4860 t.settings = s = extend({
4861 success : function(co) { 4861 dom : tinymce.DOM,
4862 window.execScript(co); 4862 valid_nodes : 0,
4863 done(); 4863 node_filter : 0,
4864 } 4864 attr_filter : 0,
4865 }); 4865 invalid_attrs : /^(mce_|_moz_|sizset|sizcache)/,
4866 } else { 4866 closed : /^(br|hr|input|meta|img|link|param|area)$/,
4867 e = tinymce.DOM.create('script', {id : id, type : 'text/javascript', src : tinymce._addVer(u)}); 4867 entity_encoding : 'named',
4868 Event.add(e, 'load', done); 4868 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',
4869 4869 bool_attrs : /(checked|disabled|readonly|selected|nowrap)/,
4870 // Check for head or body 4870 valid_elements : '*[*]',
4871 (document.getElementsByTagName('head')[0] || document.body).appendChild(e); 4871 extended_valid_elements : 0,
4872 } 4872 valid_child_elements : 0,
4873 } 4873 invalid_elements : 0,
4874 } 4874 fix_table_elements : 1,
4875 4875 fix_list_elements : true,
4876 }); 4876 fix_content_duplication : true,
4877 4877 convert_fonts_to_spans : false,
4878 // Global script loader 4878 font_size_classes : 0,
4879 tinymce.ScriptLoader = new tinymce.dom.ScriptLoader(); 4879 font_size_style_values : 0,
4880})(); 4880 apply_source_formatting : 0,
4881 4881 indent_mode : 'simple',
4882/* file:jscripts/tiny_mce/classes/ui/Control.js */ 4882 indent_char : '\t',
4883 4883 indent_levels : 1,
4884(function() { 4884 remove_linebreaks : 1,
4885 // Shorten class names 4885 remove_redundant_brs : 1,
4886 var DOM = tinymce.DOM, is = tinymce.is; 4886 element_format : 'xhtml'
4887 4887 }, s);
4888 tinymce.create('tinymce.ui.Control', { 4888
4889 Control : function(id, s) { 4889 t.dom = s.dom;
4890 this.id = id; 4890
4891 this.settings = s = s || {}; 4891 if (s.remove_redundant_brs) {
4892 this.rendered = false; 4892 t.onPostProcess.add(function(se, o) {
4893 this.onRender = new tinymce.util.Dispatcher(this); 4893 // Remove single BR at end of block elements since they get rendered
4894 this.classPrefix = ''; 4894 o.content = o.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi, function(a, b, c) {
4895 this.scope = s.scope || this; 4895 // Check if it's a single element
4896 this.disabled = 0; 4896 if (/^<br \/>\s*<\//.test(a))
4897 this.active = 0; 4897 return '</' + c + '>';
4898 }, 4898
4899 4899 return a;
4900 setDisabled : function(s) { 4900 });
4901 var e; 4901 });
4902 4902 }
4903 if (s != this.disabled) { 4903
4904 e = DOM.get(this.id); 4904 // Remove XHTML element endings i.e. produce crap :) XHTML is better
4905 4905 if (s.element_format == 'html') {
4906 // Add accessibility title for unavailable actions 4906 t.onPostProcess.add(function(se, o) {
4907 if (e && this.settings.unavailable_prefix) { 4907 o.content = o.content.replace(/<([^>]+) \/>/g, '<$1>');
4908 if (s) { 4908 });
4909 this.prevTitle = e.title; 4909 }
4910 e.title = this.settings.unavailable_prefix + ": " + e.title; 4910
4911 } else 4911 if (s.fix_list_elements) {
4912 e.title = this.prevTitle; 4912 t.onPreProcess.add(function(se, o) {
4913 } 4913 var nl, x, a = ['ol', 'ul'], i, n, p, r = /^(OL|UL)$/, np;
4914 4914
4915 this.setState('Disabled', s); 4915 function prevNode(e, n) {
4916 this.setState('Enabled', !s); 4916 var a = n.split(','), i;
4917 this.disabled = s; 4917
4918 } 4918 while ((e = e.previousSibling) != null) {
4919 }, 4919 for (i=0; i<a.length; i++) {
4920 4920 if (e.nodeName == a[i])
4921 isDisabled : function() { 4921 return e;
4922 return this.disabled; 4922 }
4923 }, 4923 }
4924 4924
4925 setActive : function(s) { 4925 return null;
4926 if (s != this.active) { 4926 };
4927 this.setState('Active', s); 4927
4928 this.active = s; 4928 for (x=0; x<a.length; x++) {
4929 } 4929 nl = t.dom.select(a[x], o.node);
4930 }, 4930
4931 4931 for (i=0; i<nl.length; i++) {
4932 isActive : function() { 4932 n = nl[i];
4933 return this.active; 4933 p = n.parentNode;
4934 }, 4934
4935 4935 if (r.test(p.nodeName)) {
4936 setState : function(c, s) { 4936 np = prevNode(n, 'LI');
4937 var n = DOM.get(this.id); 4937
4938 4938 if (!np) {
4939 c = this.classPrefix + c; 4939 np = t.dom.create('li');
4940 4940 np.innerHTML = '&nbsp;';
4941 if (s) 4941 np.appendChild(n);
4942 DOM.addClass(n, c); 4942 p.insertBefore(np, p.firstChild);
4943 else 4943 } else
4944 DOM.removeClass(n, c); 4944 np.appendChild(n);
4945 }, 4945 }
4946 4946 }
4947 isRendered : function() { 4947 }
4948 return this.rendered; 4948 });
4949 }, 4949 }
4950 4950
4951 renderHTML : function() { 4951 if (s.fix_table_elements) {
4952 }, 4952 t.onPreProcess.add(function(se, o) {
4953 4953 each(t.dom.select('p table', o.node).reverse(), function(n) {
4954 renderTo : function(n) { 4954 var parent = t.dom.getParent(n.parentNode, 'table,p');
4955 DOM.setHTML(n, this.renderHTML()); 4955
4956 }, 4956 if (parent.nodeName != 'TABLE') {
4957 4957 // IE has a odd bug where tables inside paragraphs sometimes gets wrapped in a BODY and documentFragement element
4958 postRender : function() { 4958 // This hack seems to resolve that issue. This will normally not happed since your contents should be valid in the first place
4959 var t = this, b; 4959 if (isIE)
4960 4960 t.dom.setOuterHTML(n, n.outerHTML);
4961 // Set pending states 4961
4962 if (is(t.disabled)) { 4962 t.dom.split(parent, n);
4963 b = t.disabled; 4963 }
4964 t.disabled = -1; 4964 });
4965 t.setDisabled(b); 4965 });
4966 } 4966 }
4967 4967 },
4968 if (is(t.active)) { 4968
4969 b = t.active; 4969 setEntities : function(s) {
4970 t.active = -1; 4970 var t = this, a, i, l = {}, re = '', v;
4971 t.setActive(b); 4971
4972 } 4972 // No need to setup more than once
4973 }, 4973 if (t.entityLookup)
4974 4974 return;
4975 remove : function() { 4975
4976 DOM.remove(this.id); 4976 // Build regex and lookup array
4977 this.destroy(); 4977 a = s.split(',');
4978 }, 4978 for (i = 0; i < a.length; i += 2) {
4979 4979 v = a[i];
4980 destroy : function() { 4980
4981 tinymce.dom.Event.clear(this.id); 4981 // Don't add default &amp; &quot; etc.
4982 } 4982 if (v == 34 || v == 38 || v == 60 || v == 62)
4983 4983 continue;
4984 }); 4984
4985})(); 4985 l[String.fromCharCode(a[i])] = a[i + 1];
4986/* file:jscripts/tiny_mce/classes/ui/Container.js */ 4986
4987 4987 v = parseInt(a[i]).toString(16);
4988tinymce.create('tinymce.ui.Container:tinymce.ui.Control', { 4988 re += '\\u' + '0000'.substring(v.length) + v;
4989 Container : function(id, s) { 4989 }
4990 this.parent(id, s); 4990
4991 this.controls = []; 4991 if (!re) {
4992 this.lookup = {}; 4992 t.settings.entity_encoding = 'raw';
4993 }, 4993 return;
4994 4994 }
4995 add : function(c) { 4995
4996 this.lookup[c.id] = c; 4996 t.entitiesRE = new RegExp('[' + re + ']', 'g');
4997 this.controls.push(c); 4997 t.entityLookup = l;
4998 4998 },
4999 return c; 4999
5000 }, 5000 setValidChildRules : function(s) {
5001 5001 this.childRules = null;
5002 get : function(n) { 5002 this.addValidChildRules(s);
5003 return this.lookup[n]; 5003 },
5004 } 5004
5005 5005 addValidChildRules : function(s) {
5006 }); 5006 var t = this, inst, intr, bloc;
5007 5007
5008 5008 if (!s)
5009/* file:jscripts/tiny_mce/classes/ui/Separator.js */ 5009 return;
5010 5010
5011tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', { 5011 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';
5012 Separator : function(id, s) { 5012 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';
5013 this.parent(id, s); 5013 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';
5014 this.classPrefix = 'mceSeparator'; 5014
5015 }, 5015 each(s.split(','), function(s) {
5016 5016 var p = s.split(/\[|\]/), re;
5017 renderHTML : function() { 5017
5018 return tinymce.DOM.createHTML('span', {'class' : this.classPrefix}); 5018 s = '';
5019 } 5019 each(p[1].split('|'), function(v) {
5020 5020 if (s)
5021 }); 5021 s += '|';
5022 5022
5023/* file:jscripts/tiny_mce/classes/ui/MenuItem.js */ 5023 switch (v) {
5024 5024 case '%itrans':
5025(function() { 5025 v = intr;
5026 var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk; 5026 break;
5027 5027
5028 tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', { 5028 case '%itrans_na':
5029 MenuItem : function(id, s) { 5029 v = intr.substring(2);
5030 this.parent(id, s); 5030 break;
5031 this.classPrefix = 'mceMenuItem'; 5031
5032 }, 5032 case '%istrict':
5033 5033 v = inst;
5034 setSelected : function(s) { 5034 break;
5035 this.setState('Selected', s); 5035
5036 this.selected = s; 5036 case '%istrict_na':
5037 }, 5037 v = inst.substring(2);
5038 5038 break;
5039 isSelected : function() { 5039
5040 return this.selected; 5040 case '%btrans':
5041 }, 5041 v = bloc;
5042 5042 break;
5043 postRender : function() { 5043
5044 var t = this; 5044 case '%bstrict':
5045 5045 v = bloc;
5046 t.parent(); 5046 break;
5047 5047 }
5048 // Set pending state 5048
5049 if (is(t.selected)) 5049 s += v;
5050 t.setSelected(t.selected); 5050 });
5051 } 5051 re = new RegExp('^(' + s.toLowerCase() + ')$', 'i');
5052 5052
5053 }); 5053 each(p[0].split('/'), function(s) {
5054})(); 5054 t.childRules = t.childRules || {};
5055 5055 t.childRules[s] = re;
5056/* file:jscripts/tiny_mce/classes/ui/Menu.js */ 5056 });
5057 5057 });
5058(function() { 5058
5059 var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk; 5059 // Build regex
5060 5060 s = '';
5061 tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', { 5061 each(t.childRules, function(v, k) {
5062 Menu : function(id, s) { 5062 if (s)
5063 var t = this; 5063 s += '|';
5064 5064
5065 t.parent(id, s); 5065 s += k;
5066 t.items = {}; 5066 });
5067 t.collapsed = false; 5067
5068 t.menuCount = 0; 5068 t.parentElementsRE = new RegExp('^(' + s.toLowerCase() + ')$', 'i');
5069 t.onAddItem = new tinymce.util.Dispatcher(this); 5069
5070 }, 5070 /*console.debug(t.parentElementsRE.toString());
5071 5071 each(t.childRules, function(v) {
5072 expand : function(d) { 5072 console.debug(v.toString());
5073 var t = this; 5073 });*/
5074 5074 },
5075 if (d) { 5075
5076 walk(t, function(o) { 5076 setRules : function(s) {
5077 if (o.expand) 5077 var t = this;
5078 o.expand(); 5078
5079 }, 'items', t); 5079 t._setup();
5080 } 5080 t.rules = {};
5081 5081 t.wildRules = [];
5082 t.collapsed = false; 5082 t.validElements = {};
5083 }, 5083
5084 5084 return t.addRules(s);
5085 collapse : function(d) { 5085 },
5086 var t = this; 5086
5087 5087 addRules : function(s) {
5088 if (d) { 5088 var t = this, dr;
5089 walk(t, function(o) { 5089
5090 if (o.collapse) 5090 if (!s)
5091 o.collapse(); 5091 return;
5092 }, 'items', t); 5092
5093 } 5093 t._setup();
5094 5094
5095 t.collapsed = true; 5095 each(s.split(','), function(s) {
5096 }, 5096 var p = s.split(/\[|\]/), tn = p[0].split('/'), ra, at, wat, va = [];
5097 5097
5098 isCollapsed : function() { 5098 // Extend with default rules
5099 return this.collapsed; 5099 if (dr)
5100 }, 5100 at = tinymce.extend([], dr.attribs);
5101 5101
5102 add : function(o) { 5102 // Parse attributes
5103 if (!o.settings) 5103 if (p.length > 1) {
5104 o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o); 5104 each(p[1].split('|'), function(s) {
5105 5105 var ar = {}, i;
5106 this.onAddItem.dispatch(this, o); 5106
5107 5107 at = at || [];
5108 return this.items[o.id] = o; 5108
5109 }, 5109 // Parse attribute rule
5110 5110 s = s.replace(/::/g, '~');
5111 addSeparator : function() { 5111 s = /^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);
5112 return this.add({separator : true}); 5112 s[2] = s[2].replace(/~/g, ':');
5113 }, 5113
5114 5114 // Add required attributes
5115 addMenu : function(o) { 5115 if (s[1] == '!') {
5116 if (!o.collapse) 5116 ra = ra || [];
5117 o = this.createMenu(o); 5117 ra.push(s[2]);
5118 5118 }
5119 this.menuCount++; 5119
5120 5120 // Remove inherited attributes
5121 return this.add(o); 5121 if (s[1] == '-') {
5122 }, 5122 for (i = 0; i <at.length; i++) {
5123 5123 if (at[i].name == s[2]) {
5124 hasMenus : function() { 5124 at.splice(i, 1);
5125 return this.menuCount !== 0; 5125 return;
5126 }, 5126 }
5127 5127 }
5128 remove : function(o) { 5128 }
5129 delete this.items[o.id]; 5129
5130 }, 5130 switch (s[3]) {
5131 5131 // Add default attrib values
5132 removeAll : function() { 5132 case '=':
5133 var t = this; 5133 ar.defaultVal = s[4] || '';
5134 5134 break;
5135 walk(t, function(o) { 5135
5136 if (o.removeAll) 5136 // Add forced attrib values
5137 o.removeAll(); 5137 case ':':
5138 else 5138 ar.forcedVal = s[4];
5139 o.remove(); 5139 break;
5140 5140
5141 o.destroy(); 5141 // Add validation values
5142 }, 'items', t); 5142 case '<':
5143 5143 ar.validVals = s[4].split('?');
5144 t.items = {}; 5144 break;
5145 }, 5145 }
5146 5146
5147 createMenu : function(o) { 5147 if (/[*.?]/.test(s[2])) {
5148 var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o); 5148 wat = wat || [];
5149 5149 ar.nameRE = new RegExp('^' + wildcardToRE(s[2]) + '$');
5150 m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem); 5150 wat.push(ar);
5151 5151 } else {
5152 return m; 5152 ar.name = s[2];
5153 } 5153 at.push(ar);
5154 5154 }
5155 }); 5155
5156})(); 5156 va.push(s[2]);
5157/* file:jscripts/tiny_mce/classes/ui/DropMenu.js */ 5157 });
5158 5158 }
5159(function() { 5159
5160 var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element; 5160 // Handle element names
5161 5161 each(tn, function(s, i) {
5162 tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', { 5162 var pr = s.charAt(0), x = 1, ru = {};
5163 DropMenu : function(id, s) { 5163
5164 s = s || {}; 5164 // Extend with default rule data
5165 s.container = s.container || DOM.doc.body; 5165 if (dr) {
5166 s.offset_x = s.offset_x || 0; 5166 if (dr.noEmpty)
5167 s.offset_y = s.offset_y || 0; 5167 ru.noEmpty = dr.noEmpty;
5168 s.vp_offset_x = s.vp_offset_x || 0; 5168
5169 s.vp_offset_y = s.vp_offset_y || 0; 5169 if (dr.fullEnd)
5170 5170 ru.fullEnd = dr.fullEnd;
5171 if (is(s.icons) && !s.icons) 5171
5172 s['class'] += ' mceNoIcons'; 5172 if (dr.padd)
5173 5173 ru.padd = dr.padd;
5174 this.parent(id, s); 5174 }
5175 this.onShowMenu = new tinymce.util.Dispatcher(this); 5175
5176 this.onHideMenu = new tinymce.util.Dispatcher(this); 5176 // Handle prefixes
5177 this.classPrefix = 'mceMenu'; 5177 switch (pr) {
5178 }, 5178 case '-':
5179 5179 ru.noEmpty = true;
5180 createMenu : function(s) { 5180 break;
5181 var t = this, cs = t.settings, m; 5181
5182 5182 case '+':
5183 s.container = s.container || cs.container; 5183 ru.fullEnd = true;
5184 s.parent = t; 5184 break;
5185 s.constrain = s.constrain || cs.constrain; 5185
5186 s['class'] = s['class'] || cs['class']; 5186 case '#':
5187 s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x; 5187 ru.padd = true;
5188 s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y; 5188 break;
5189 m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s); 5189
5190 5190 default:
5191 m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem); 5191 x = 0;
5192 5192 }
5193 return m; 5193
5194 }, 5194 tn[i] = s = s.substring(x);
5195 5195 t.validElements[s] = 1;
5196 update : function() { 5196
5197 var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th; 5197 // Add element name or element regex
5198 5198 if (/[*.?]/.test(tn[0])) {
5199 tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth; 5199 ru.nameRE = new RegExp('^' + wildcardToRE(tn[0]) + '$');
5200 th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight; 5200 t.wildRules = t.wildRules || {};
5201 5201 t.wildRules.push(ru);
5202 if (!DOM.boxModel) 5202 } else {
5203 t.element.setStyles({width : tw + 2, height : th + 2}); 5203 ru.name = tn[0];
5204 else 5204
5205 t.element.setStyles({width : tw, height : th}); 5205 // Store away default rule
5206 5206 if (tn[0] == '@')
5207 if (s.max_width) 5207 dr = ru;
5208 DOM.setStyle(co, 'width', tw); 5208
5209 5209 t.rules[s] = ru;
5210 if (s.max_height) { 5210 }
5211 DOM.setStyle(co, 'height', th); 5211
5212 5212 ru.attribs = at;
5213 if (tb.clientHeight < s.max_height) 5213
5214 DOM.setStyle(co, 'overflow', 'hidden'); 5214 if (ra)
5215 } 5215 ru.requiredAttribs = ra;
5216 }, 5216
5217 5217 if (wat) {
5218 showMenu : function(x, y, px) { 5218 // Build valid attributes regexp
5219 var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix; 5219 s = '';
5220 5220 each(va, function(v) {
5221 t.collapse(1); 5221 if (s)
5222 5222 s += '|';
5223 if (t.isMenuVisible) 5223
5224 return; 5224 s += '(' + wildcardToRE(v) + ')';
5225 5225 });
5226 if (!t.rendered) { 5226 ru.validAttribsRE = new RegExp('^' + s.toLowerCase() + '$');
5227 co = DOM.add(t.settings.container, t.renderNode()); 5227 ru.wildAttribs = wat;
5228 5228 }
5229 each(t.items, function(o) { 5229 });
5230 o.postRender(); 5230 });
5231 }); 5231
5232 5232 // Build valid elements regexp
5233 t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container}); 5233 s = '';
5234 } else 5234 each(t.validElements, function(v, k) {
5235 co = DOM.get('menu_' + t.id); 5235 if (s)
5236 5236 s += '|';
5237 // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug 5237
5238 if (!tinymce.isOpera) 5238 if (k != '@')
5239 DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF}); 5239 s += k;
5240 5240 });
5241 DOM.show(co); 5241 t.validElementsRE = new RegExp('^(' + wildcardToRE(s.toLowerCase()) + ')$');
5242 t.update(); 5242
5243 5243 //console.debug(t.validElementsRE.toString());
5244 x += s.offset_x || 0; 5244 //console.dir(t.rules);
5245 y += s.offset_y || 0; 5245 //console.dir(t.wildRules);
5246 vp.w -= 4; 5246 },
5247 vp.h -= 4; 5247
5248 5248 findRule : function(n) {
5249 // Move inside viewport if not submenu 5249 var t = this, rl = t.rules, i, r;
5250 if (s.constrain) { 5250
5251 w = co.clientWidth - ot; 5251 t._setup();
5252 h = co.clientHeight - ot; 5252
5253 mx = vp.x + vp.w; 5253 // Exact match
5254 my = vp.y + vp.h; 5254 r = rl[n];
5255 5255 if (r)
5256 if ((x + s.vp_offset_x + w) > mx) 5256 return r;
5257 x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w); 5257
5258 5258 // Try wildcards
5259 if ((y + s.vp_offset_y + h) > my) 5259 rl = t.wildRules;
5260 y = Math.max(0, (my - s.vp_offset_y) - h); 5260 for (i = 0; i < rl.length; i++) {
5261 } 5261 if (rl[i].nameRE.test(n))
5262 5262 return rl[i];
5263 DOM.setStyles(co, {left : x , top : y}); 5263 }
5264 t.element.update(); 5264
5265 5265 return null;
5266 t.isMenuVisible = 1; 5266 },
5267 t.mouseClickFunc = Event.add(co, 'click', function(e) { 5267
5268 var m; 5268 findAttribRule : function(ru, n) {
5269 5269 var i, wa = ru.wildAttribs;
5270 e = e.target; 5270
5271 5271 for (i = 0; i < wa.length; i++) {
5272 if (e && (e = DOM.getParent(e, 'TR')) && !DOM.hasClass(e, cp + 'ItemSub')) { 5272 if (wa[i].nameRE.test(n))
5273 m = t.items[e.id]; 5273 return wa[i];
5274 5274 }
5275 if (m.isDisabled()) 5275
5276 return; 5276 return null;
5277 5277 },
5278 dm = t; 5278
5279 5279 serialize : function(n, o) {
5280 while (dm) { 5280 var h, t = this, doc;
5281 if (dm.hideMenu) 5281
5282 dm.hideMenu(); 5282 t._setup();
5283 5283 o = o || {};
5284 dm = dm.settings.parent; 5284 o.format = o.format || 'html';
5285 } 5285 n = n.cloneNode(true);
5286 5286 t.processObj = o;
5287 if (m.settings.onclick) 5287
5288 m.settings.onclick(e); 5288 // Nodes needs to be attached to something in WebKit due to a bug https://bugs.webkit.org/show_bug.cgi?id=25571
5289 5289 if (tinymce.isWebKit) {
5290 return Event.cancel(e); // Cancel to fix onbeforeunload problem 5290 doc = n.ownerDocument.implementation.createHTMLDocument("");
5291 } 5291 doc.body.appendChild(doc.importNode(n));
5292 }); 5292 }
5293 5293
5294 if (t.hasMenus()) { 5294 t.key = '' + (parseInt(t.key) + 1);
5295 t.mouseOverFunc = Event.add(co, 'mouseover', function(e) { 5295
5296 var m, r, mi; 5296 // Pre process
5297 5297 if (!o.no_events) {
5298 e = e.target; 5298 o.node = n;
5299 if (e && (e = DOM.getParent(e, 'TR'))) { 5299 t.onPreProcess.dispatch(t, o);
5300 m = t.items[e.id]; 5300 }
5301 5301
5302 if (t.lastMenu) 5302 // Serialize HTML DOM into a string
5303 t.lastMenu.collapse(1); 5303 t.writer.reset();
5304 5304 t._serializeNode(n, o.getInner);
5305 if (m.isDisabled()) 5305
5306 return; 5306 // Post process
5307 5307 o.content = t.writer.getContent();
5308 if (e && DOM.hasClass(e, cp + 'ItemSub')) { 5308
5309 //p = DOM.getPos(s.container); 5309 if (!o.no_events)
5310 r = DOM.getRect(e); 5310 t.onPostProcess.dispatch(t, o);
5311 m.showMenu((r.x + r.w - ot), r.y - ot, r.x); 5311
5312 t.lastMenu = m; 5312 t._postProcess(o);
5313 DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive'); 5313 o.node = null;
5314 } 5314
5315 } 5315 return tinymce.trim(o.content);
5316 }); 5316 },
5317 } 5317
5318 5318 // Internal functions
5319 t.onShowMenu.dispatch(t); 5319
5320 5320 _postProcess : function(o) {
5321 if (s.keyboard_focus) { 5321 var t = this, s = t.settings, h = o.content, sc = [], p;
5322 Event.add(co, 'keydown', t._keyHandler, t); 5322
5323 DOM.select('a', 'menu_' + t.id)[0].focus(); // Select first link 5323 if (o.format == 'html') {
5324 t._focusIdx = 0; 5324 // Protect some elements
5325 } 5325 p = t._protect({
5326 }, 5326 content : h,
5327 5327 patterns : [
5328 hideMenu : function(c) { 5328 {pattern : /(<script[^>]*>)(.*?)(<\/script>)/g},
5329 var t = this, co = DOM.get('menu_' + t.id), e; 5329 {pattern : /(<noscript[^>]*>)(.*?)(<\/noscript>)/g},
5330 5330 {pattern : /(<style[^>]*>)(.*?)(<\/style>)/g},
5331 if (!t.isMenuVisible) 5331 {pattern : /(<pre[^>]*>)(.*?)(<\/pre>)/g, encode : 1},
5332 return; 5332 {pattern : /(<!--\[CDATA\[)(.*?)(\]\]-->)/g}
5333 5333 ]
5334 Event.remove(co, 'mouseover', t.mouseOverFunc); 5334 });
5335 Event.remove(co, 'click', t.mouseClickFunc); 5335
5336 Event.remove(co, 'keydown', t._keyHandler); 5336 h = p.content;
5337 DOM.hide(co); 5337
5338 t.isMenuVisible = 0; 5338 // Entity encode
5339 5339 if (s.entity_encoding !== 'raw')
5340 if (!c) 5340 h = t._encode(h);
5341 t.collapse(1); 5341
5342 5342 // Use BR instead of &nbsp; padded P elements inside editor and use <p>&nbsp;</p> outside editor
5343 if (t.element) 5343/* if (o.set)
5344 t.element.hide(); 5344 h = h.replace(/<p>\s+(&nbsp;|&#160;|\u00a0|<br \/>)\s+<\/p>/g, '<p><br /></p>');
5345 5345 else
5346 if (e = DOM.get(t.id)) 5346 h = h.replace(/<p>\s+(&nbsp;|&#160;|\u00a0|<br \/>)\s+<\/p>/g, '<p>$1</p>');*/
5347 DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive'); 5347
5348 5348 // Since Gecko and Safari keeps whitespace in the DOM we need to
5349 t.onHideMenu.dispatch(t); 5349 // remove it inorder to match other browsers. But I think Gecko and Safari is right.
5350 }, 5350 // This process is only done when getting contents out from the editor.
5351 5351 if (!o.set) {
5352 add : function(o) { 5352 // We need to replace paragraph whitespace with an nbsp before indentation to keep the \u00a0 char
5353 var t = this, co; 5353 h = h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g, s.entity_encoding == 'numeric' ? '<p$1>&#160;</p>' : '<p$1>&nbsp;</p>');
5354 5354
5355 o = t.parent(o); 5355 if (s.remove_linebreaks) {
5356 5356 h = h.replace(/\r?\n|\r/g, ' ');
5357 if (t.isRendered && (co = DOM.get('menu_' + t.id))) 5357 h = h.replace(/(<[^>]+>)\s+/g, '$1 ');
5358 t._add(DOM.select('tbody', co)[0], o); 5358 h = h.replace(/\s+(<\/[^>]+>)/g, ' $1');
5359 5359 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>'); // Trim block start
5360 return o; 5360 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>'); // Trim block start
5361 }, 5361 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>'); // Trim block end
5362 5362 }
5363 collapse : function(d) { 5363
5364 this.parent(d); 5364 // Simple indentation
5365 this.hideMenu(1); 5365 if (s.apply_source_formatting && s.indent_mode == 'simple') {
5366 }, 5366 // Add line breaks before and after block elements
5367 5367 h = h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g, '\n<$1$2$3>\n');
5368 remove : function(o) { 5368 h = h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g, '\n<$1$2>');
5369 DOM.remove(o.id); 5369 h = h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g, '</$1>\n');
5370 this.destroy(); 5370 h = h.replace(/\n\n/g, '\n');
5371 5371 }
5372 return this.parent(o); 5372 }
5373 }, 5373
5374 5374 h = t._unprotect(h, p);
5375 destroy : function() { 5375
5376 var t = this, co = DOM.get('menu_' + t.id); 5376 // Restore CDATA sections
5377 5377 h = h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g, '<![CDATA[$1]]>');
5378 Event.remove(co, 'mouseover', t.mouseOverFunc); 5378
5379 Event.remove(co, 'click', t.mouseClickFunc); 5379 // Restore the \u00a0 character if raw mode is enabled
5380 5380 if (s.entity_encoding == 'raw')
5381 if (t.element) 5381 h = h.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g, '<p$1>\u00a0</p>');
5382 t.element.remove(); 5382
5383 5383 // Restore noscript elements
5384 DOM.remove(co); 5384 h = h.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g, function(v, attribs, text) {
5385 }, 5385 return '<noscript' + attribs + '>' + t.dom.decode(text.replace(/<!--|-->/g, '')) + '</noscript>';
5386 5386 });
5387 renderNode : function() { 5387 }
5388 var t = this, s = t.settings, n, tb, co, w; 5388
5389 5389 o.content = h;
5390 w = DOM.create('div', {id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000'}); 5390 },
5391 co = DOM.add(w, 'div', {id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')}); 5391
5392 t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container}); 5392 _serializeNode : function(n, inn) {
5393 5393 var t = this, s = t.settings, w = t.writer, hc, el, cn, i, l, a, at, no, v, nn, ru, ar, iv, closed;
5394 if (s.menu_line) 5394
5395 DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'}); 5395 if (!s.node_filter || s.node_filter(n)) {
5396 5396 switch (n.nodeType) {
5397// n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'}); 5397 case 1: // Element
5398 n = DOM.add(co, 'table', {id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0}); 5398 if (n.hasAttribute ? n.hasAttribute('mce_bogus') : n.getAttribute('mce_bogus'))
5399 tb = DOM.add(n, 'tbody'); 5399 return;
5400 5400
5401 each(t.items, function(o) { 5401 iv = false;
5402 t._add(tb, o); 5402 hc = n.hasChildNodes();
5403 }); 5403 nn = n.getAttribute('mce_name') || n.nodeName.toLowerCase();
5404 5404
5405 t.rendered = true; 5405 // Add correct prefix on IE
5406 5406 if (isIE) {
5407 return w; 5407 if (n.scopeName !== 'HTML' && n.scopeName !== 'html')
5408 }, 5408 nn = n.scopeName + ':' + nn;
5409 5409 }
5410 // Internal functions 5410
5411 5411 // Remove mce prefix on IE needed for the abbr element
5412 _keyHandler : function(e) { 5412 if (nn.indexOf('mce:') === 0)
5413 var t = this, kc = e.keyCode; 5413 nn = nn.substring(4);
5414 5414
5415 function focus(d) { 5415 // Check if valid
5416 var i = t._focusIdx + d, e = DOM.select('a', 'menu_' + t.id)[i]; 5416 if (!t.validElementsRE || !t.validElementsRE.test(nn) || (t.invalidElementsRE && t.invalidElementsRE.test(nn)) || inn) {
5417 5417 iv = true;
5418 if (e) { 5418 break;
5419 t._focusIdx = i; 5419 }
5420 e.focus(); 5420
5421 } 5421 if (isIE) {
5422 }; 5422 // Fix IE content duplication (DOM can have multiple copies of the same node)
5423 5423 if (s.fix_content_duplication) {
5424 switch (kc) { 5424 if (n.mce_serialized == t.key)
5425 case 38: 5425 return;
5426 focus(-1); // Select first link 5426
5427 return; 5427 n.mce_serialized = t.key;
5428 5428 }
5429 case 40: 5429
5430 focus(1); 5430 // IE sometimes adds a / infront of the node name
5431 return; 5431 if (nn.charAt(0) == '/')
5432 5432 nn = nn.substring(1);
5433 case 13: 5433 } else if (isGecko) {
5434 return; 5434 // Ignore br elements
5435 5435 if (n.nodeName === 'BR' && n.getAttribute('type') == '_moz')
5436 case 27: 5436 return;
5437 return this.hideMenu(); 5437 }
5438 } 5438
5439 }, 5439 // Check if valid child
5440 5440 if (t.childRules) {
5441 _add : function(tb, o) { 5441 if (t.parentElementsRE.test(t.elementName)) {
5442 var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic; 5442 if (!t.childRules[t.elementName].test(nn)) {
5443 5443 iv = true;
5444 if (s.separator) { 5444 break;
5445 ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'}); 5445 }
5446 DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'}); 5446 }
5447 5447
5448 if (n = ro.previousSibling) 5448 t.elementName = nn;
5449 DOM.addClass(n, 'mceLast'); 5449 }
5450 5450
5451 return; 5451 ru = t.findRule(nn);
5452 } 5452 nn = ru.name || nn;
5453 5453 closed = s.closed.test(nn);
5454 n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'}); 5454
5455 n = it = DOM.add(n, 'td'); 5455 // Skip empty nodes or empty node name in IE
5456 n = a = DOM.add(n, 'a', {href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'}); 5456 if ((!hc && ru.noEmpty) || (isIE && !nn)) {
5457 5457 iv = true;
5458 DOM.addClass(it, s['class']); 5458 break;
5459// n = DOM.add(n, 'span', {'class' : 'item'}); 5459 }
5460 5460
5461 ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')}); 5461 // Check required
5462 5462 if (ru.requiredAttribs) {
5463 if (s.icon_src) 5463 a = ru.requiredAttribs;
5464 DOM.add(ic, 'img', {src : s.icon_src}); 5464
5465 5465 for (i = a.length - 1; i >= 0; i--) {
5466 n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title); 5466 if (this.dom.getAttrib(n, a[i]) !== '')
5467 5467 break;
5468 if (o.settings.style) 5468 }
5469 DOM.setAttrib(n, 'style', o.settings.style); 5469
5470 5470 // None of the required was there
5471 if (tb.childNodes.length == 1) 5471 if (i == -1) {
5472 DOM.addClass(ro, 'mceFirst'); 5472 iv = true;
5473 5473 break;
5474 if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator')) 5474 }
5475 DOM.addClass(ro, 'mceFirst'); 5475 }
5476 5476
5477 if (o.collapse) 5477 w.writeStartElement(nn);
5478 DOM.addClass(ro, cp + 'ItemSub'); 5478
5479 5479 // Add ordered attributes
5480 if (n = ro.previousSibling) 5480 if (ru.attribs) {
5481 DOM.removeClass(n, 'mceLast'); 5481 for (i=0, at = ru.attribs, l = at.length; i<l; i++) {
5482 5482 a = at[i];
5483 DOM.addClass(ro, 'mceLast'); 5483 v = t._getAttrib(n, a);
5484 } 5484
5485 5485 if (v !== null)
5486 }); 5486 w.writeAttribute(a.name, v);
5487})(); 5487 }
5488/* file:jscripts/tiny_mce/classes/ui/Button.js */ 5488 }
5489 5489
5490(function() { 5490 // Add wild attributes
5491 var DOM = tinymce.DOM; 5491 if (ru.validAttribsRE) {
5492 5492 at = t.dom.getAttribs(n);
5493 tinymce.create('tinymce.ui.Button:tinymce.ui.Control', { 5493 for (i=at.length-1; i>-1; i--) {
5494 Button : function(id, s) { 5494 no = at[i];
5495 this.parent(id, s); 5495
5496 this.classPrefix = 'mceButton'; 5496 if (no.specified) {
5497 }, 5497 a = no.nodeName.toLowerCase();
5498 5498
5499 renderHTML : function() { 5499 if (s.invalid_attrs.test(a) || !ru.validAttribsRE.test(a))
5500 var cp = this.classPrefix, s = this.settings, h, l; 5500 continue;
5501 5501
5502 l = DOM.encode(s.label || ''); 5502 ar = t.findAttribRule(ru, a);
5503 h = '<a id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + (l ? ' ' + cp + 'Labeled' : '') +'" onmousedown="return false;" onclick="return false;" title="' + DOM.encode(s.title) + '">'; 5503 v = t._getAttrib(n, ar, a);
5504 5504
5505 if (s.image) 5505 if (v !== null)
5506 h += '<img class="mceIcon" src="' + s.image + '" />' + l + '</a>'; 5506 w.writeAttribute(a, v);
5507 else 5507 }
5508 h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '') + '</a>'; 5508 }
5509 5509 }
5510 return h; 5510
5511 }, 5511 // Write text from script
5512 5512 if (nn === 'script' && tinymce.trim(n.innerHTML)) {
5513 postRender : function() { 5513 w.writeText('// '); // Padd it with a comment so it will parse on older browsers
5514 var t = this, s = t.settings; 5514 w.writeCDATA(n.innerHTML.replace(/<!--|-->|<\[CDATA\[|\]\]>/g, '')); // Remove comments and cdata stuctures
5515 5515 hc = false;
5516 tinymce.dom.Event.add(t.id, 'click', function(e) { 5516 break;
5517 if (!t.isDisabled()) 5517 }
5518 return s.onclick.call(s.scope, e); 5518
5519 }); 5519 // Padd empty nodes with a &nbsp;
5520 } 5520 if (ru.padd) {
5521 5521 // If it has only one bogus child, padd it anyway workaround for <td><br /></td> bug
5522 }); 5522 if (hc && (cn = n.firstChild) && cn.nodeType === 1 && n.childNodes.length === 1) {
5523})(); 5523 if (cn.hasAttribute ? cn.hasAttribute('mce_bogus') : cn.getAttribute('mce_bogus'))
5524 5524 w.writeText('\u00a0');
5525/* file:jscripts/tiny_mce/classes/ui/ListBox.js */ 5525 } else if (!hc)
5526 5526 w.writeText('\u00a0'); // No children then padd it
5527(function() { 5527 }
5528 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher; 5528
5529 5529 break;
5530 tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', { 5530
5531 ListBox : function(id, s) { 5531 case 3: // Text
5532 var t = this; 5532 // Check if valid child
5533 5533 if (t.childRules && t.parentElementsRE.test(t.elementName)) {
5534 t.parent(id, s); 5534 if (!t.childRules[t.elementName].test(n.nodeName))
5535 t.items = []; 5535 return;
5536 t.onChange = new Dispatcher(t); 5536 }
5537 t.onPostRender = new Dispatcher(t); 5537
5538 t.onAdd = new Dispatcher(t); 5538 return w.writeText(n.nodeValue);
5539 t.onRenderMenu = new tinymce.util.Dispatcher(this); 5539
5540 t.classPrefix = 'mceListBox'; 5540 case 4: // CDATA
5541 }, 5541 return w.writeCDATA(n.nodeValue);
5542 5542
5543 select : function(va) { 5543 case 8: // Comment
5544 var t = this, fv, f; 5544 return w.writeComment(n.nodeValue);
5545 5545 }
5546 if (va == undefined) 5546 } else if (n.nodeType == 1)
5547 return t.selectByIndex(-1); 5547 hc = n.hasChildNodes();
5548 5548
5549 // Is string or number make function selector 5549 if (hc && !closed) {
5550 if (va && va.call) 5550 cn = n.firstChild;
5551 f = va; 5551
5552 else { 5552 while (cn) {
5553 f = function(v) { 5553 t._serializeNode(cn);
5554 return v == va; 5554 t.elementName = nn;
5555 }; 5555 cn = cn.nextSibling;
5556 } 5556 }
5557 5557 }
5558 // Do we need to do something? 5558
5559 if (va != t.selectedValue) { 5559 // Write element end
5560 // Find item 5560 if (!iv) {
5561 each(t.items, function(o, i) { 5561 if (!closed)
5562 if (f(o.value)) { 5562 w.writeFullEndElement();
5563 fv = 1; 5563 else
5564 t.selectByIndex(i); 5564 w.writeEndElement();
5565 return false; 5565 }
5566 } 5566 },
5567 }); 5567
5568 5568 _protect : function(o) {
5569 if (!fv) 5569 var t = this;
5570 t.selectByIndex(-1); 5570
5571 } 5571 o.items = o.items || [];
5572 }, 5572
5573 5573 function enc(s) {
5574 selectByIndex : function(idx) { 5574 return s.replace(/[\r\n\\]/g, function(c) {
5575 var t = this, e, o; 5575 if (c === '\n')
5576 5576 return '\\n';
5577 if (idx != t.selectedIndex) { 5577 else if (c === '\\')
5578 e = DOM.get(t.id + '_text'); 5578 return '\\\\';
5579 o = t.items[idx]; 5579
5580 5580 return '\\r';
5581 if (o) { 5581 });
5582 t.selectedValue = o.value; 5582 };
5583 t.selectedIndex = idx; 5583
5584 DOM.setHTML(e, DOM.encode(o.title)); 5584 function dec(s) {
5585 DOM.removeClass(e, 'mceTitle'); 5585 return s.replace(/\\[\\rn]/g, function(c) {
5586 } else { 5586 if (c === '\\n')
5587 DOM.setHTML(e, DOM.encode(t.settings.title)); 5587 return '\n';
5588 DOM.addClass(e, 'mceTitle'); 5588 else if (c === '\\\\')
5589 t.selectedValue = t.selectedIndex = null; 5589 return '\\';
5590 } 5590
5591 5591 return '\r';
5592 e = 0; 5592 });
5593 } else 5593 };
5594 t.selectedValue = t.selectedIndex = null; 5594
5595 }, 5595 each(o.patterns, function(p) {
5596 5596 o.content = dec(enc(o.content).replace(p.pattern, function(x, a, b, c) {
5597 add : function(n, v, o) { 5597 b = dec(b);
5598 var t = this; 5598
5599 5599 if (p.encode)
5600 o = o || {}; 5600 b = t._encode(b);
5601 o = tinymce.extend(o, { 5601
5602 title : n, 5602 o.items.push(b);
5603 value : v 5603 return a + '<!--mce:' + (o.items.length - 1) + '-->' + c;
5604 }); 5604 }));
5605 5605 });
5606 t.items.push(o); 5606
5607 t.onAdd.dispatch(t, o); 5607 return o;
5608 }, 5608 },
5609 5609
5610 getLength : function() { 5610 _unprotect : function(h, o) {
5611 return this.items.length; 5611 h = h.replace(/\<!--mce:([0-9]+)--\>/g, function(a, b) {
5612 }, 5612 return o.items[parseInt(b)];
5613 5613 });
5614 renderHTML : function() { 5614
5615 var h = '', t = this, s = t.settings, cp = t.classPrefix; 5615 o.items = [];
5616 5616
5617 h = '<table id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>'; 5617 return h;
5618 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>'; 5618 },
5619 h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span></span>') + '</td>'; 5619
5620 h += '</tr></tbody></table>'; 5620 _encode : function(h) {
5621 5621 var t = this, s = t.settings, l;
5622 return h; 5622
5623 }, 5623 // Entity encode
5624 5624 if (s.entity_encoding !== 'raw') {
5625 showMenu : function() { 5625 if (s.entity_encoding.indexOf('named') != -1) {
5626 var t = this, p1, p2, e = DOM.get(this.id), m; 5626 t.setEntities(s.entities);
5627 5627 l = t.entityLookup;
5628 if (t.isDisabled() || t.items.length == 0) 5628
5629 return; 5629 h = h.replace(t.entitiesRE, function(a) {
5630 5630 var v;
5631 if (t.menu && t.menu.isMenuVisible) 5631
5632 return t.hideMenu(); 5632 if (v = l[a])
5633 5633 a = '&' + v + ';';
5634 if (!t.isMenuRendered) { 5634
5635 t.renderMenu(); 5635 return a;
5636 t.isMenuRendered = true; 5636 });
5637 } 5637 }
5638 5638
5639 p1 = DOM.getPos(this.settings.menu_container); 5639 if (s.entity_encoding.indexOf('numeric') != -1) {
5640 p2 = DOM.getPos(e); 5640 h = h.replace(/[\u007E-\uFFFF]/g, function(a) {
5641 5641 return '&#' + a.charCodeAt(0) + ';';
5642 m = t.menu; 5642 });
5643 m.settings.offset_x = p2.x; 5643 }
5644 m.settings.offset_y = p2.y; 5644 }
5645 m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus 5645
5646 5646 return h;
5647 // Select in menu 5647 },
5648 if (t.oldID) 5648
5649 m.items[t.oldID].setSelected(0); 5649 _setup : function() {
5650 5650 var t = this, s = this.settings;
5651 each(t.items, function(o) { 5651
5652 if (o.value === t.selectedValue) { 5652 if (t.done)
5653 m.items[o.id].setSelected(1); 5653 return;
5654 t.oldID = o.id; 5654
5655 } 5655 t.done = 1;
5656 }); 5656
5657 5657 t.setRules(s.valid_elements);
5658 m.showMenu(0, e.clientHeight); 5658 t.addRules(s.extended_valid_elements);
5659 5659 t.addValidChildRules(s.valid_child_elements);
5660 Event.add(DOM.doc, 'mousedown', t.hideMenu, t); 5660
5661 DOM.addClass(t.id, t.classPrefix + 'Selected'); 5661 if (s.invalid_elements)
5662 5662 t.invalidElementsRE = new RegExp('^(' + wildcardToRE(s.invalid_elements.replace(/,/g, '|').toLowerCase()) + ')$');
5663 //DOM.get(t.id + '_text').focus(); 5663
5664 }, 5664 if (s.attrib_value_filter)
5665 5665 t.attribValueFilter = s.attribValueFilter;
5666 hideMenu : function(e) { 5666 },
5667 var t = this; 5667
5668 5668 _getAttrib : function(n, a, na) {
5669 // Prevent double toogles by canceling the mouse click event to the button 5669 var i, v;
5670 if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open')) 5670
5671 return; 5671 na = na || a.name;
5672 5672
5673 if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceMenu');})) { 5673 if (a.forcedVal && (v = a.forcedVal)) {
5674 DOM.removeClass(t.id, t.classPrefix + 'Selected'); 5674 if (v === '{$uid}')
5675 Event.remove(DOM.doc, 'mousedown', t.hideMenu, t); 5675 return this.dom.uniqueId();
5676 5676
5677 if (t.menu) 5677 return v;
5678 t.menu.hideMenu(); 5678 }
5679 } 5679
5680 }, 5680 v = this.dom.getAttrib(n, na);
5681 5681
5682 renderMenu : function() { 5682 // Bool attr
5683 var t = this, m; 5683 if (this.settings.bool_attrs.test(na) && v) {
5684 5684 v = ('' + v).toLowerCase();
5685 m = t.settings.control_manager.createDropMenu(t.id + '_menu', { 5685
5686 menu_line : 1, 5686 if (v === 'false' || v === '0')
5687 'class' : t.classPrefix + 'Menu mceNoIcons', 5687 return null;
5688 max_width : 150, 5688
5689 max_height : 150 5689 v = na;
5690 }); 5690 }
5691 5691
5692 m.onHideMenu.add(t.hideMenu, t); 5692 switch (na) {
5693 5693 case 'rowspan':
5694 m.add({ 5694 case 'colspan':
5695 title : t.settings.title, 5695 // Whats the point? Remove usless attribute value
5696 'class' : 'mceMenuItemTitle', 5696 if (v == '1')
5697 onclick : function() { 5697 v = '';
5698 if (t.settings.onselect('') !== false) 5698
5699 t.select(''); // Must be runned after 5699 break;
5700 } 5700 }
5701 }); 5701
5702 5702 if (this.attribValueFilter)
5703 each(t.items, function(o) { 5703 v = this.attribValueFilter(na, v, n);
5704 o.id = DOM.uniqueId(); 5704
5705 o.onclick = function() { 5705 if (a.validVals) {
5706 if (t.settings.onselect(o.value) !== false) 5706 for (i = a.validVals.length - 1; i >= 0; i--) {
5707 t.select(o.value); // Must be runned after 5707 if (v == a.validVals[i])
5708 }; 5708 break;
5709 5709 }
5710 m.add(o); 5710
5711 }); 5711 if (i == -1)
5712 5712 return null;
5713 t.onRenderMenu.dispatch(t, m); 5713 }
5714 t.menu = m; 5714
5715 }, 5715 if (v === '' && typeof(a.defaultVal) != 'undefined') {
5716 5716 v = a.defaultVal;
5717 postRender : function() { 5717
5718 var t = this, cp = t.classPrefix; 5718 if (v === '{$uid}')
5719 5719 return this.dom.uniqueId();
5720 Event.add(t.id, 'click', t.showMenu, t); 5720
5721 Event.add(t.id + '_text', 'focus', function(e) { 5721 return v;
5722 if (!t._focused) { 5722 } else {
5723 t.keyDownHandler = Event.add(t.id + '_text', 'keydown', function(e) { 5723 // Remove internal mceItemXX classes when content is extracted from editor
5724 var idx = -1, v, kc = e.keyCode; 5724 if (na == 'class' && this.processObj.get)
5725 5725 v = v.replace(/\s?mceItem\w+\s?/g, '');
5726 // Find current index 5726 }
5727 each(t.items, function(v, i) { 5727
5728 if (t.selectedValue == v.value) 5728 if (v === '')
5729 idx = i; 5729 return null;
5730 }); 5730
5731 5731
5732 // Move up/down 5732 return v;
5733 if (kc == 38) 5733 }
5734 v = t.items[idx - 1]; 5734 });
5735 else if (kc == 40) 5735})(tinymce);
5736 v = t.items[idx + 1]; 5736(function(tinymce) {
5737 else if (kc == 13) { 5737 var each = tinymce.each, Event = tinymce.dom.Event;
5738 // Fake select on enter 5738
5739 v = t.selectedValue; 5739 tinymce.create('tinymce.dom.ScriptLoader', {
5740 t.selectedValue = null; // Needs to be null to fake change 5740 ScriptLoader : function(s) {
5741 t.settings.onselect(v); 5741 this.settings = s || {};
5742 return Event.cancel(e); 5742 this.queue = [];
5743 } 5743 this.lookup = {};
5744 5744 },
5745 if (v) { 5745
5746 t.hideMenu(); 5746 isDone : function(u) {
5747 t.select(v.value); 5747 return this.lookup[u] ? this.lookup[u].state == 2 : 0;
5748 } 5748 },
5749 }); 5749
5750 } 5750 markDone : function(u) {
5751 5751 this.lookup[u] = {state : 2, url : u};
5752 t._focused = 1; 5752 },
5753 }); 5753
5754 Event.add(t.id + '_text', 'blur', function() {Event.remove(t.id + '_text', 'keydown', t.keyDownHandler); t._focused = 0;}); 5754 add : function(u, cb, s, pr) {
5755 5755 var t = this, lo = t.lookup, o;
5756 // Old IE doesn't have hover on all elements 5756
5757 if (tinymce.isIE6 || !DOM.boxModel) { 5757 if (o = lo[u]) {
5758 Event.add(t.id, 'mouseover', function() { 5758 // Is loaded fire callback
5759 if (!DOM.hasClass(t.id, cp + 'Disabled')) 5759 if (cb && o.state == 2)
5760 DOM.addClass(t.id, cp + 'Hover'); 5760 cb.call(s || this);
5761 }); 5761
5762 5762 return o;
5763 Event.add(t.id, 'mouseout', function() { 5763 }
5764 if (!DOM.hasClass(t.id, cp + 'Disabled')) 5764
5765 DOM.removeClass(t.id, cp + 'Hover'); 5765 o = {state : 0, url : u, func : cb, scope : s || this};
5766 }); 5766
5767 } 5767 if (pr)
5768 5768 t.queue.unshift(o);
5769 t.onPostRender.dispatch(t, DOM.get(t.id)); 5769 else
5770 }, 5770 t.queue.push(o);
5771 5771
5772 destroy : function() { 5772 lo[u] = o;
5773 this.parent(); 5773
5774 5774 return o;
5775 Event.clear(this.id + '_text'); 5775 },
5776 } 5776
5777 5777 load : function(u, cb, s) {
5778 }); 5778 var t = this, o;
5779})(); 5779
5780/* file:jscripts/tiny_mce/classes/ui/NativeListBox.js */ 5780 if (o = t.lookup[u]) {
5781 5781 // Is loaded fire callback
5782(function() { 5782 if (cb && o.state == 2)
5783 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher; 5783 cb.call(s || t);
5784 5784
5785 tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', { 5785 return o;
5786 NativeListBox : function(id, s) { 5786 }
5787 this.parent(id, s); 5787
5788 this.classPrefix = 'mceNativeListBox'; 5788 function loadScript(u) {
5789 }, 5789 if (Event.domLoaded || t.settings.strict_mode) {
5790 5790 tinymce.util.XHR.send({
5791 setDisabled : function(s) { 5791 url : tinymce._addVer(u),
5792 DOM.get(this.id).disabled = s; 5792 error : t.settings.error,
5793 }, 5793 async : false,
5794 5794 success : function(co) {
5795 isDisabled : function() { 5795 t.eval(co);
5796 return DOM.get(this.id).disabled; 5796 }
5797 }, 5797 });
5798 5798 } else
5799 select : function(va) { 5799 document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"></script>');
5800 var t = this, fv, f; 5800 };
5801 5801
5802 if (va == undefined) 5802 if (!tinymce.is(u, 'string')) {
5803 return t.selectByIndex(-1); 5803 each(u, function(u) {
5804 5804 loadScript(u);
5805 // Is string or number make function selector 5805 });
5806 if (va && va.call) 5806
5807 f = va; 5807 if (cb)
5808 else { 5808 cb.call(s || t);
5809 f = function(v) { 5809 } else {
5810 return v == va; 5810 loadScript(u);
5811 }; 5811
5812 } 5812 if (cb)
5813 5813 cb.call(s || t);
5814 // Do we need to do something? 5814 }
5815 if (va != t.selectedValue) { 5815 },
5816 // Find item 5816
5817 each(t.items, function(o, i) { 5817 loadQueue : function(cb, s) {
5818 if (f(o.value)) { 5818 var t = this;
5819 fv = 1; 5819
5820 t.selectByIndex(i); 5820 if (!t.queueLoading) {
5821 return false; 5821 t.queueLoading = 1;
5822 } 5822 t.queueCallbacks = [];
5823 }); 5823
5824 5824 t.loadScripts(t.queue, function() {
5825 if (!fv) 5825 t.queueLoading = 0;
5826 t.selectByIndex(-1); 5826
5827 } 5827 if (cb)
5828 }, 5828 cb.call(s || t);
5829 5829
5830 selectByIndex : function(idx) { 5830 each(t.queueCallbacks, function(o) {
5831 DOM.get(this.id).selectedIndex = idx + 1; 5831 o.func.call(o.scope);
5832 this.selectedValue = this.items[idx] ? this.items[idx].value : null; 5832 });
5833 }, 5833 });
5834 5834 } else if (cb)
5835 add : function(n, v, a) { 5835 t.queueCallbacks.push({func : cb, scope : s || t});
5836 var o, t = this; 5836 },
5837 5837
5838 a = a || {}; 5838 eval : function(co) {
5839 a.value = v; 5839 var w = window;
5840 5840
5841 if (t.isRendered()) 5841 // Evaluate script
5842 DOM.add(DOM.get(this.id), 'option', a, n); 5842 if (!w.execScript) {
5843 5843 try {
5844 o = { 5844 eval.call(w, co);
5845 title : n, 5845 } catch (ex) {
5846 value : v, 5846 eval(co, w); // Firefox 3.0a8
5847 attribs : a 5847 }
5848 }; 5848 } else
5849 5849 w.execScript(co); // IE
5850 t.items.push(o); 5850 },
5851 t.onAdd.dispatch(t, o); 5851
5852 }, 5852 loadScripts : function(sc, cb, s) {
5853 5853 var t = this, lo = t.lookup;
5854 getLength : function() { 5854
5855 return DOM.get(this.id).options.length - 1; 5855 function done(o) {
5856 }, 5856 o.state = 2; // Has been loaded
5857 5857
5858 renderHTML : function() { 5858 // Run callback
5859 var h, t = this; 5859 if (o.func)
5860 5860 o.func.call(o.scope || t);
5861 h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --'); 5861 };
5862 5862
5863 each(t.items, function(it) { 5863 function allDone() {
5864 h += DOM.createHTML('option', {value : it.value}, it.title); 5864 var l;
5865 }); 5865
5866 5866 // Check if all files are loaded
5867 h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox'}, h); 5867 l = sc.length;
5868 5868 each(sc, function(o) {
5869 return h; 5869 o = lo[o.url];
5870 }, 5870
5871 5871 if (o.state === 2) {// It has finished loading
5872 postRender : function() { 5872 done(o);
5873 var t = this, ch; 5873 l--;
5874 5874 } else
5875 t.rendered = true; 5875 load(o);
5876 5876 });
5877 function onChange(e) { 5877
5878 var v = t.items[e.target.selectedIndex - 1]; 5878 // They are all loaded
5879 5879 if (l === 0 && cb) {
5880 if (v && (v = v.value)) { 5880 cb.call(s || t);
5881 t.onChange.dispatch(t, v); 5881 cb = 0;
5882 5882 }
5883 if (t.settings.onselect) 5883 };
5884 t.settings.onselect(v); 5884
5885 } 5885 function load(o) {
5886 }; 5886 if (o.state > 0)
5887 5887 return;
5888 Event.add(t.id, 'change', onChange); 5888
5889 5889 o.state = 1; // Is loading
5890 // Accessibility keyhandler 5890
5891 Event.add(t.id, 'keydown', function(e) { 5891 tinymce.dom.ScriptLoader.loadScript(o.url, function() {
5892 var bf; 5892 done(o);
5893 5893 allDone();
5894 Event.remove(t.id, 'change', ch); 5894 });
5895 5895
5896 bf = Event.add(t.id, 'blur', function() { 5896 /*
5897 Event.add(t.id, 'change', onChange); 5897 tinymce.util.XHR.send({
5898 Event.remove(t.id, 'blur', bf); 5898 url : o.url,
5899 }); 5899 error : t.settings.error,
5900 5900 success : function(co) {
5901 if (e.keyCode == 13 || e.keyCode == 32) { 5901 t.eval(co);
5902 onChange(e); 5902 done(o);
5903 return Event.cancel(e); 5903 allDone();
5904 } 5904 }
5905 }); 5905 });
5906 5906 */
5907 t.onPostRender.dispatch(t, DOM.get(t.id)); 5907 };
5908 } 5908
5909 5909 each(sc, function(o) {
5910 }); 5910 var u = o.url;
5911})(); 5911
5912/* file:jscripts/tiny_mce/classes/ui/MenuButton.js */ 5912 // Add to queue if needed
5913 5913 if (!lo[u]) {
5914(function() { 5914 lo[u] = o;
5915 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each; 5915 t.queue.push(o);
5916 5916 } else
5917 tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', { 5917 o = lo[u];
5918 MenuButton : function(id, s) { 5918
5919 this.parent(id, s); 5919 // Is already loading or has been loaded
5920 this.onRenderMenu = new tinymce.util.Dispatcher(this); 5920 if (o.state > 0)
5921 s.menu_container = s.menu_container || DOM.doc.body; 5921 return;
5922 }, 5922
5923 5923 if (!Event.domLoaded && !t.settings.strict_mode) {
5924 showMenu : function() { 5924 var ix, ol = '';
5925 var t = this, p1, p2, e = DOM.get(t.id), m; 5925
5926 5926 // Add onload events
5927 if (t.isDisabled()) 5927 if (cb || o.func) {
5928 return; 5928 o.state = 1; // Is loading
5929 5929
5930 if (!t.isMenuRendered) { 5930 ix = tinymce.dom.ScriptLoader._addOnLoad(function() {
5931 t.renderMenu(); 5931 done(o);
5932 t.isMenuRendered = true; 5932 allDone();
5933 } 5933 });
5934 5934
5935 if (t.isMenuVisible) 5935 if (tinymce.isIE)
5936 return t.hideMenu(); 5936 ol = ' onreadystatechange="';
5937 5937 else
5938 p1 = DOM.getPos(t.settings.menu_container); 5938 ol = ' onload="';
5939 p2 = DOM.getPos(e); 5939
5940 5940 ol += 'tinymce.dom.ScriptLoader._onLoad(this,\'' + u + '\',' + ix + ');"';
5941 m = t.menu; 5941 }
5942 m.settings.offset_x = p2.x; 5942
5943 m.settings.offset_y = p2.y; 5943 document.write('<script type="text/javascript" src="' + tinymce._addVer(u) + '"' + ol + '></script>');
5944 m.settings.vp_offset_x = p2.x; 5944
5945 m.settings.vp_offset_y = p2.y; 5945 if (!o.func)
5946 m.settings.keyboard_focus = t._focused; 5946 done(o);
5947 m.showMenu(0, e.clientHeight); 5947 } else
5948 5948 load(o);
5949 Event.add(DOM.doc, 'mousedown', t.hideMenu, t); 5949 });
5950 t.setState('Selected', 1); 5950
5951 5951 allDone();
5952 t.isMenuVisible = 1; 5952 },
5953 }, 5953
5954 5954 // Static methods
5955 renderMenu : function() { 5955 'static' : {
5956 var t = this, m; 5956 _addOnLoad : function(f) {
5957 5957 var t = this;
5958 m = t.settings.control_manager.createDropMenu(t.id + '_menu', { 5958
5959 menu_line : 1, 5959 t._funcs = t._funcs || [];
5960 'class' : this.classPrefix + 'Menu', 5960 t._funcs.push(f);
5961 icons : t.settings.icons 5961
5962 }); 5962 return t._funcs.length - 1;
5963 5963 },
5964 m.onHideMenu.add(t.hideMenu, t); 5964
5965 5965 _onLoad : function(e, u, ix) {
5966 t.onRenderMenu.dispatch(t, m); 5966 if (!tinymce.isIE || e.readyState == 'complete')
5967 t.menu = m; 5967 this._funcs[ix].call(this);
5968 }, 5968 },
5969 5969
5970 hideMenu : function(e) { 5970 loadScript : function(u, cb) {
5971 var t = this; 5971 var id = tinymce.DOM.uniqueId(), e;
5972 5972
5973 // Prevent double toogles by canceling the mouse click event to the button 5973 function done() {
5974 if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';})) 5974 Event.clear(id);
5975 return; 5975 tinymce.DOM.remove(id);
5976 5976
5977 if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceMenu');})) { 5977 if (cb) {
5978 t.setState('Selected', 0); 5978 cb.call(document, u);
5979 Event.remove(DOM.doc, 'mousedown', t.hideMenu, t); 5979 cb = 0;
5980 if (t.menu) 5980 }
5981 t.menu.hideMenu(); 5981 };
5982 } 5982
5983 5983 if (tinymce.isIE) {
5984 t.isMenuVisible = 0; 5984/* Event.add(e, 'readystatechange', function(e) {
5985 }, 5985 if (e.target && e.target.readyState == 'complete')
5986 5986 done();
5987 postRender : function() { 5987 });*/
5988 var t = this, s = t.settings; 5988
5989 5989 tinymce.util.XHR.send({
5990 Event.add(t.id, 'click', function() { 5990 url : tinymce._addVer(u),
5991 if (!t.isDisabled()) { 5991 async : false,
5992 if (s.onclick) 5992 success : function(co) {
5993 s.onclick(t.value); 5993 window.execScript(co);
5994 5994 done();
5995 t.showMenu(); 5995 }
5996 } 5996 });
5997 }); 5997 } else {
5998 } 5998 e = tinymce.DOM.create('script', {id : id, type : 'text/javascript', src : tinymce._addVer(u)});
5999 5999 Event.add(e, 'load', done);
6000 }); 6000
6001})(); 6001 // Check for head or body
6002 6002 (document.getElementsByTagName('head')[0] || document.body).appendChild(e);
6003/* file:jscripts/tiny_mce/classes/ui/SplitButton.js */ 6003 }
6004 6004 }
6005(function() { 6005 }
6006 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each; 6006 });
6007 6007
6008 tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', { 6008 // Global script loader
6009 SplitButton : function(id, s) { 6009 tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();
6010 this.parent(id, s); 6010})(tinymce);
6011 this.classPrefix = 'mceSplitButton'; 6011(function(tinymce) {
6012 }, 6012 // Shorten class names
6013 6013 var DOM = tinymce.DOM, is = tinymce.is;
6014 renderHTML : function() { 6014
6015 var h, t = this, s = t.settings, h1; 6015 tinymce.create('tinymce.ui.Control', {
6016 6016 Control : function(id, s) {
6017 h = '<tbody><tr>'; 6017 this.id = id;
6018 6018 this.settings = s = s || {};
6019 if (s.image) 6019 this.rendered = false;
6020 h1 = DOM.createHTML('img ', {src : s.image, 'class' : 'mceAction ' + s['class']}); 6020 this.onRender = new tinymce.util.Dispatcher(this);
6021 else 6021 this.classPrefix = '';
6022 h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, ''); 6022 this.scope = s.scope || this;
6023 6023 this.disabled = 0;
6024 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>'; 6024 this.active = 0;
6025 6025 },
6026 h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']}); 6026
6027 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>'; 6027 setDisabled : function(s) {
6028 6028 var e;
6029 h += '</tr></tbody>'; 6029
6030 6030 if (s != this.disabled) {
6031 return DOM.createHTML('table', {id : t.id, 'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', onmousedown : 'return false;', title : s.title}, h); 6031 e = DOM.get(this.id);
6032 }, 6032
6033 6033 // Add accessibility title for unavailable actions
6034 postRender : function() { 6034 if (e && this.settings.unavailable_prefix) {
6035 var t = this, s = t.settings; 6035 if (s) {
6036 6036 this.prevTitle = e.title;
6037 if (s.onclick) { 6037 e.title = this.settings.unavailable_prefix + ": " + e.title;
6038 Event.add(t.id + '_action', 'click', function() { 6038 } else
6039 if (!t.isDisabled()) 6039 e.title = this.prevTitle;
6040 s.onclick(t.value); 6040 }
6041 }); 6041
6042 } 6042 this.setState('Disabled', s);
6043 6043 this.setState('Enabled', !s);
6044 Event.add(t.id + '_open', 'click', t.showMenu, t); 6044 this.disabled = s;
6045 Event.add(t.id + '_open', 'focus', function() {t._focused = 1;}); 6045 }
6046 Event.add(t.id + '_open', 'blur', function() {t._focused = 0;}); 6046 },
6047 6047
6048 // Old IE doesn't have hover on all elements 6048 isDisabled : function() {
6049 if (tinymce.isIE6 || !DOM.boxModel) { 6049 return this.disabled;
6050 Event.add(t.id, 'mouseover', function() { 6050 },
6051 if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled')) 6051
6052 DOM.addClass(t.id, 'mceSplitButtonHover'); 6052 setActive : function(s) {
6053 }); 6053 if (s != this.active) {
6054 6054 this.setState('Active', s);
6055 Event.add(t.id, 'mouseout', function() { 6055 this.active = s;
6056 if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled')) 6056 }
6057 DOM.removeClass(t.id, 'mceSplitButtonHover'); 6057 },
6058 }); 6058
6059 } 6059 isActive : function() {
6060 }, 6060 return this.active;
6061 6061 },
6062 destroy : function() { 6062
6063 this.parent(); 6063 setState : function(c, s) {
6064 6064 var n = DOM.get(this.id);
6065 Event.clear(this.id + '_action'); 6065
6066 Event.clear(this.id + '_open'); 6066 c = this.classPrefix + c;
6067 } 6067
6068 6068 if (s)
6069 }); 6069 DOM.addClass(n, c);
6070})(); 6070 else
6071 6071 DOM.removeClass(n, c);
6072/* file:jscripts/tiny_mce/classes/ui/ColorSplitButton.js */ 6072 },
6073 6073
6074(function() { 6074 isRendered : function() {
6075 var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each; 6075 return this.rendered;
6076 6076 },
6077 tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', { 6077
6078 ColorSplitButton : function(id, s) { 6078 renderHTML : function() {
6079 var t = this; 6079 },
6080 6080
6081 t.parent(id, s); 6081 renderTo : function(n) {
6082 6082 DOM.setHTML(n, this.renderHTML());
6083 t.settings = s = tinymce.extend({ 6083 },
6084 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', 6084
6085 grid_width : 8, 6085 postRender : function() {
6086 default_color : '#888888' 6086 var t = this, b;
6087 }, t.settings); 6087
6088 6088 // Set pending states
6089 t.onShowMenu = new tinymce.util.Dispatcher(t); 6089 if (is(t.disabled)) {
6090 t.onHideMenu = new tinymce.util.Dispatcher(t); 6090 b = t.disabled;
6091 6091 t.disabled = -1;
6092 t.value = s.default_color; 6092 t.setDisabled(b);
6093 }, 6093 }
6094 6094
6095 showMenu : function() { 6095 if (is(t.active)) {
6096 var t = this, r, p, e, p2; 6096 b = t.active;
6097 6097 t.active = -1;
6098 if (t.isDisabled()) 6098 t.setActive(b);
6099 return; 6099 }
6100 6100 },
6101 if (!t.isMenuRendered) { 6101
6102 t.renderMenu(); 6102 remove : function() {
6103 t.isMenuRendered = true; 6103 DOM.remove(this.id);
6104 } 6104 this.destroy();
6105 6105 },
6106 if (t.isMenuVisible) 6106
6107 return t.hideMenu(); 6107 destroy : function() {
6108 6108 tinymce.dom.Event.clear(this.id);
6109 e = DOM.get(t.id); 6109 }
6110 DOM.show(t.id + '_menu'); 6110 });
6111 DOM.addClass(e, 'mceSplitButtonSelected'); 6111})(tinymce);tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {
6112 p2 = DOM.getPos(e); 6112 Container : function(id, s) {
6113 DOM.setStyles(t.id + '_menu', { 6113 this.parent(id, s);
6114 left : p2.x, 6114
6115 top : p2.y + e.clientHeight, 6115 this.controls = [];
6116 zIndex : 200000 6116
6117 }); 6117 this.lookup = {};
6118 e = 0; 6118 },
6119 6119
6120 Event.add(DOM.doc, 'mousedown', t.hideMenu, t); 6120 add : function(c) {
6121 6121 this.lookup[c.id] = c;
6122 if (t._focused) { 6122 this.controls.push(c);
6123 t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) { 6123
6124 if (e.keyCode == 27) 6124 return c;
6125 t.hideMenu(); 6125 },
6126 }); 6126
6127 6127 get : function(n) {
6128 DOM.select('a', t.id + '_menu')[0].focus(); // Select first link 6128 return this.lookup[n];
6129 } 6129 }
6130 6130});
6131 t.onShowMenu.dispatch(t); 6131
6132 6132tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {
6133 t.isMenuVisible = 1; 6133 Separator : function(id, s) {
6134 }, 6134 this.parent(id, s);
6135 6135 this.classPrefix = 'mceSeparator';
6136 hideMenu : function(e) { 6136 },
6137 var t = this; 6137
6138 6138 renderHTML : function() {
6139 // Prevent double toogles by canceling the mouse click event to the button 6139 return tinymce.DOM.createHTML('span', {'class' : this.classPrefix});
6140 if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';})) 6140 }
6141 return; 6141});
6142 6142(function(tinymce) {
6143 if (!e || !DOM.getParent(e.target, function(n) {return DOM.hasClass(n, 'mceSplitButtonMenu');})) { 6143 var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;
6144 DOM.removeClass(t.id, 'mceSplitButtonSelected'); 6144
6145 Event.remove(DOM.doc, 'mousedown', t.hideMenu, t); 6145 tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {
6146 Event.remove(t.id + '_menu', 'keydown', t._keyHandler); 6146 MenuItem : function(id, s) {
6147 DOM.hide(t.id + '_menu'); 6147 this.parent(id, s);
6148 } 6148 this.classPrefix = 'mceMenuItem';
6149 6149 },
6150 t.onHideMenu.dispatch(t); 6150
6151 6151 setSelected : function(s) {
6152 t.isMenuVisible = 0; 6152 this.setState('Selected', s);
6153 }, 6153 this.selected = s;
6154 6154 },
6155 renderMenu : function() { 6155
6156 var t = this, m, i = 0, s = t.settings, n, tb, tr, w; 6156 isSelected : function() {
6157 6157 return this.selected;
6158 w = DOM.add(s.menu_container, 'div', {id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'}); 6158 },
6159 m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'}); 6159
6160 DOM.add(m, 'span', {'class' : 'mceMenuLine'}); 6160 postRender : function() {
6161 6161 var t = this;
6162 n = DOM.add(m, 'table', {'class' : 'mceColorSplitMenu'}); 6162
6163 tb = DOM.add(n, 'tbody'); 6163 t.parent();
6164 6164
6165 // Generate color grid 6165 // Set pending state
6166 i = 0; 6166 if (is(t.selected))
6167 each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) { 6167 t.setSelected(t.selected);
6168 c = c.replace(/^#/, ''); 6168 }
6169 6169 });
6170 if (!i--) { 6170})(tinymce);
6171 tr = DOM.add(tb, 'tr'); 6171(function(tinymce) {
6172 i = s.grid_width - 1; 6172 var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;
6173 } 6173
6174 6174 tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {
6175 n = DOM.add(tr, 'td'); 6175 Menu : function(id, s) {
6176 6176 var t = this;
6177 n = DOM.add(n, 'a', { 6177
6178 href : 'javascript:;', 6178 t.parent(id, s);
6179 style : { 6179 t.items = {};
6180 backgroundColor : '#' + c 6180 t.collapsed = false;
6181 }, 6181 t.menuCount = 0;
6182 mce_color : '#' + c 6182 t.onAddItem = new tinymce.util.Dispatcher(this);
6183 }); 6183 },
6184 }); 6184
6185 6185 expand : function(d) {
6186 if (s.more_colors_func) { 6186 var t = this;
6187 n = DOM.add(tb, 'tr'); 6187
6188 n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'}); 6188 if (d) {
6189 n = DOM.add(n, 'a', {id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title); 6189 walk(t, function(o) {
6190 6190 if (o.expand)
6191 Event.add(n, 'click', function(e) { 6191 o.expand();
6192 s.more_colors_func.call(s.more_colors_scope || this); 6192 }, 'items', t);
6193 return Event.cancel(e); // Cancel to fix onbeforeunload problem 6193 }
6194 }); 6194
6195 } 6195 t.collapsed = false;
6196 6196 },
6197 DOM.addClass(m, 'mceColorSplitMenu'); 6197
6198 6198 collapse : function(d) {
6199 Event.add(t.id + '_menu', 'click', function(e) { 6199 var t = this;
6200 var c; 6200
6201 6201 if (d) {
6202 e = e.target; 6202 walk(t, function(o) {
6203 6203 if (o.collapse)
6204 if (e.nodeName == 'A' && (c = e.getAttribute('mce_color'))) 6204 o.collapse();
6205 t.setColor(c); 6205 }, 'items', t);
6206 6206 }
6207 return Event.cancel(e); // Prevent IE auto save warning 6207
6208 }); 6208 t.collapsed = true;
6209 6209 },
6210 return w; 6210
6211 }, 6211 isCollapsed : function() {
6212 6212 return this.collapsed;
6213 setColor : function(c) { 6213 },
6214 var t = this; 6214
6215 6215 add : function(o) {
6216 DOM.setStyle(t.id + '_preview', 'backgroundColor', c); 6216 if (!o.settings)
6217 6217 o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);
6218 t.value = c; 6218
6219 t.hideMenu(); 6219 this.onAddItem.dispatch(this, o);
6220 t.settings.onselect(c); 6220
6221 }, 6221 return this.items[o.id] = o;
6222 6222 },
6223 postRender : function() { 6223
6224 var t = this, id = t.id; 6224 addSeparator : function() {
6225 6225 return this.add({separator : true});
6226 t.parent(); 6226 },
6227 DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'}); 6227
6228 DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value); 6228 addMenu : function(o) {
6229 }, 6229 if (!o.collapse)
6230 6230 o = this.createMenu(o);
6231 destroy : function() { 6231
6232 this.parent(); 6232 this.menuCount++;
6233 6233
6234 Event.clear(this.id + '_menu'); 6234 return this.add(o);
6235 Event.clear(this.id + '_more'); 6235 },
6236 DOM.remove(this.id + '_menu'); 6236
6237 } 6237 hasMenus : function() {
6238 6238 return this.menuCount !== 0;
6239 }); 6239 },
6240})(); 6240
6241 6241 remove : function(o) {
6242/* file:jscripts/tiny_mce/classes/ui/Toolbar.js */ 6242 delete this.items[o.id];
6243 6243 },
6244tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', { 6244
6245 renderHTML : function() { 6245 removeAll : function() {
6246 var t = this, h = '', c, co, dom = tinymce.DOM, s = t.settings, i, pr, nx, cl; 6246 var t = this;
6247 6247
6248 cl = t.controls; 6248 walk(t, function(o) {
6249 for (i=0; i<cl.length; i++) { 6249 if (o.removeAll)
6250 // Get current control, prev control, next control and if the control is a list box or not 6250 o.removeAll();
6251 co = cl[i]; 6251 else
6252 pr = cl[i - 1]; 6252 o.remove();
6253 nx = cl[i + 1]; 6253
6254 6254 o.destroy();
6255 // Add toolbar start 6255 }, 'items', t);
6256 if (i === 0) { 6256
6257 c = 'mceToolbarStart'; 6257 t.items = {};
6258 6258 },
6259 if (co.Button) 6259
6260 c += ' mceToolbarStartButton'; 6260 createMenu : function(o) {
6261 else if (co.SplitButton) 6261 var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);
6262 c += ' mceToolbarStartSplitButton'; 6262
6263 else if (co.ListBox) 6263 m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);
6264 c += ' mceToolbarStartListBox'; 6264
6265 6265 return m;
6266 h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->')); 6266 }
6267 } 6267 });
6268 6268})(tinymce);(function(tinymce) {
6269 // Add toolbar end before list box and after the previous button 6269 var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;
6270 // This is to fix the o2k7 editor skins 6270
6271 if (pr && co.ListBox) { 6271 tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {
6272 if (pr.Button || pr.SplitButton) 6272 DropMenu : function(id, s) {
6273 h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->')); 6273 s = s || {};
6274 } 6274 s.container = s.container || DOM.doc.body;
6275 6275 s.offset_x = s.offset_x || 0;
6276 // Render control HTML 6276 s.offset_y = s.offset_y || 0;
6277 6277 s.vp_offset_x = s.vp_offset_x || 0;
6278 // IE 8 quick fix, needed to propertly generate a hit area for anchors 6278 s.vp_offset_y = s.vp_offset_y || 0;
6279 if (dom.stdMode) 6279
6280 h += '<td style="position: relative">' + co.renderHTML() + '</td>'; 6280 if (is(s.icons) && !s.icons)
6281 else 6281 s['class'] += ' mceNoIcons';
6282 h += '<td>' + co.renderHTML() + '</td>'; 6282
6283 6283 this.parent(id, s);
6284 // Add toolbar start after list box and before the next button 6284 this.onShowMenu = new tinymce.util.Dispatcher(this);
6285 // This is to fix the o2k7 editor skins 6285 this.onHideMenu = new tinymce.util.Dispatcher(this);
6286 if (nx && co.ListBox) { 6286 this.classPrefix = 'mceMenu';
6287 if (nx.Button || nx.SplitButton) 6287 },
6288 h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->')); 6288
6289 } 6289 createMenu : function(s) {
6290 } 6290 var t = this, cs = t.settings, m;
6291 6291
6292 c = 'mceToolbarEnd'; 6292 s.container = s.container || cs.container;
6293 6293 s.parent = t;
6294 if (co.Button) 6294 s.constrain = s.constrain || cs.constrain;
6295 c += ' mceToolbarEndButton'; 6295 s['class'] = s['class'] || cs['class'];
6296 else if (co.SplitButton) 6296 s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;
6297 c += ' mceToolbarEndSplitButton'; 6297 s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;
6298 else if (co.ListBox) 6298 m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);
6299 c += ' mceToolbarEndListBox'; 6299
6300 6300 m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);
6301 h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->')); 6301
6302 6302 return m;
6303 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>'); 6303 },
6304 } 6304
6305 6305 update : function() {
6306 }); 6306 var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;
6307 6307
6308/* file:jscripts/tiny_mce/classes/AddOnManager.js */ 6308 tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;
6309 6309 th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;
6310(function() { 6310
6311 var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each; 6311 if (!DOM.boxModel)
6312 6312 t.element.setStyles({width : tw + 2, height : th + 2});
6313 tinymce.create('tinymce.AddOnManager', { 6313 else
6314 items : [], 6314 t.element.setStyles({width : tw, height : th});
6315 urls : {}, 6315
6316 lookup : {}, 6316 if (s.max_width)
6317 onAdd : new Dispatcher(this), 6317 DOM.setStyle(co, 'width', tw);
6318 6318
6319 get : function(n) { 6319 if (s.max_height) {
6320 return this.lookup[n]; 6320 DOM.setStyle(co, 'height', th);
6321 }, 6321
6322 6322 if (tb.clientHeight < s.max_height)
6323 requireLangPack : function(n) { 6323 DOM.setStyle(co, 'overflow', 'hidden');
6324 var u, s = tinymce.EditorManager.settings; 6324 }
6325 6325 },
6326 if (s && s.language) { 6326
6327 u = this.urls[n] + '/langs/' + s.language + '.js'; 6327 showMenu : function(x, y, px) {
6328 6328 var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;
6329 if (!tinymce.dom.Event.domLoaded && !s.strict_mode) 6329
6330 tinymce.ScriptLoader.load(u); 6330 t.collapse(1);
6331 else 6331
6332 tinymce.ScriptLoader.add(u); 6332 if (t.isMenuVisible)
6333 } 6333 return;
6334 }, 6334
6335 6335 if (!t.rendered) {
6336 add : function(id, o) { 6336 co = DOM.add(t.settings.container, t.renderNode());
6337 this.items.push(o); 6337
6338 this.lookup[id] = o; 6338 each(t.items, function(o) {
6339 this.onAdd.dispatch(this, id, o); 6339 o.postRender();
6340 6340 });
6341 return o; 6341
6342 }, 6342 t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});
6343 6343 } else
6344 load : function(n, u, cb, s) { 6344 co = DOM.get('menu_' + t.id);
6345 var t = this; 6345
6346 6346 // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug
6347 if (t.urls[n]) 6347 if (!tinymce.isOpera)
6348 return; 6348 DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});
6349 6349
6350 if (u.indexOf('/') != 0 && u.indexOf('://') == -1) 6350 DOM.show(co);
6351 u = tinymce.baseURL + '/' + u; 6351 t.update();
6352 6352
6353 t.urls[n] = u.substring(0, u.lastIndexOf('/')); 6353 x += s.offset_x || 0;
6354 tinymce.ScriptLoader.add(u, cb, s); 6354 y += s.offset_y || 0;
6355 } 6355 vp.w -= 4;
6356 6356 vp.h -= 4;
6357 }); 6357
6358 6358 // Move inside viewport if not submenu
6359 // Create plugin and theme managers 6359 if (s.constrain) {
6360 tinymce.PluginManager = new tinymce.AddOnManager(); 6360 w = co.clientWidth - ot;
6361 tinymce.ThemeManager = new tinymce.AddOnManager(); 6361 h = co.clientHeight - ot;
6362}()); 6362 mx = vp.x + vp.w;
6363/* file:jscripts/tiny_mce/classes/EditorManager.js */ 6363 my = vp.y + vp.h;
6364 6364
6365(function() { 6365 if ((x + s.vp_offset_x + w) > mx)
6366 // Shorten names 6366 x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);
6367 var each = tinymce.each, extend = tinymce.extend, DOM = tinymce.DOM, Event = tinymce.dom.Event, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, explode = tinymce.explode; 6367
6368 6368 if ((y + s.vp_offset_y + h) > my)
6369 tinymce.create('static tinymce.EditorManager', { 6369 y = Math.max(0, (my - s.vp_offset_y) - h);
6370 editors : {}, 6370 }
6371 i18n : {}, 6371
6372 activeEditor : null, 6372 DOM.setStyles(co, {left : x , top : y});
6373 6373 t.element.update();
6374 preInit : function() { 6374
6375 var t = this, lo = window.location; 6375 t.isMenuVisible = 1;
6376 6376 t.mouseClickFunc = Event.add(co, 'click', function(e) {
6377 // Setup some URLs where the editor API is located and where the document is 6377 var m;
6378 tinymce.documentBaseURL = lo.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, ''); 6378
6379 if (!/[\/\\]$/.test(tinymce.documentBaseURL)) 6379 e = e.target;
6380 tinymce.documentBaseURL += '/'; 6380
6381 6381 if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {
6382 tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL); 6382 m = t.items[e.id];
6383 tinymce.EditorManager.baseURI = new tinymce.util.URI(tinymce.baseURL); 6383
6384 6384 if (m.isDisabled())
6385 // User already specified a document.domain value 6385 return;
6386 if (document.domain && lo.hostname != document.domain) 6386
6387 tinymce.relaxedDomain = document.domain; 6387 dm = t;
6388 6388
6389 // Setup document domain if tinymce is loaded from other domain 6389 while (dm) {
6390 if (!tinymce.relaxedDomain && tinymce.EditorManager.baseURI.host != lo.hostname && lo.hostname) 6390 if (dm.hideMenu)
6391 document.domain = tinymce.relaxedDomain = lo.hostname.replace(/.*\.(.+\..+)$/, '$1'); 6391 dm.hideMenu();
6392 6392
6393 // Add before unload listener 6393 dm = dm.settings.parent;
6394 // This was required since IE was leaking memory if you added and removed beforeunload listeners 6394 }
6395 // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event 6395
6396 t.onBeforeUnload = new tinymce.util.Dispatcher(t); 6396 if (m.settings.onclick)
6397 6397 m.settings.onclick(e);
6398 // Must be on window or IE will leak if the editor is placed in frame or iframe 6398
6399 Event.add(window, 'beforeunload', function(e) { 6399 return Event.cancel(e); // Cancel to fix onbeforeunload problem
6400 t.onBeforeUnload.dispatch(t, e); 6400 }
6401 }); 6401 });
6402 }, 6402
6403 6403 if (t.hasMenus()) {
6404 init : function(s) { 6404 t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {
6405 var t = this, pl, sl = tinymce.ScriptLoader, c, e, el = [], ed; 6405 var m, r, mi;
6406 6406
6407 function execCallback(se, n, s) { 6407 e = e.target;
6408 var f = se[n]; 6408 if (e && (e = DOM.getParent(e, 'tr'))) {
6409 6409 m = t.items[e.id];
6410 if (!f) 6410
6411 return; 6411 if (t.lastMenu)
6412 6412 t.lastMenu.collapse(1);
6413 if (tinymce.is(f, 'string')) { 6413
6414 s = f.replace(/\.\w+$/, ''); 6414 if (m.isDisabled())
6415 s = s ? tinymce.resolve(s) : 0; 6415 return;
6416 f = tinymce.resolve(f); 6416
6417 } 6417 if (e && DOM.hasClass(e, cp + 'ItemSub')) {
6418 6418 //p = DOM.getPos(s.container);
6419 return f.apply(s || this, Array.prototype.slice.call(arguments, 2)); 6419 r = DOM.getRect(e);
6420 }; 6420 m.showMenu((r.x + r.w - ot), r.y - ot, r.x);
6421 6421 t.lastMenu = m;
6422 s = extend({ 6422 DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');
6423 theme : "simple", 6423 }
6424 language : "en", 6424 }
6425 strict_loading_mode : document.contentType == 'application/xhtml+xml' 6425 });
6426 }, s); 6426 }
6427 6427
6428 t.settings = s; 6428 t.onShowMenu.dispatch(t);
6429 6429
6430 // If page not loaded and strict mode isn't enabled then load them 6430 if (s.keyboard_focus) {
6431 if (!Event.domLoaded && !s.strict_loading_mode) { 6431 Event.add(co, 'keydown', t._keyHandler, t);
6432 // Load language 6432 DOM.select('a', 'menu_' + t.id)[0].focus(); // Select first link
6433 if (s.language) 6433 t._focusIdx = 0;
6434 sl.add(tinymce.baseURL + '/langs/' + s.language + '.js'); 6434 }
6435 6435 },
6436 // Load theme 6436
6437 if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme]) 6437 hideMenu : function(c) {
6438 ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js'); 6438 var t = this, co = DOM.get('menu_' + t.id), e;
6439 6439
6440 // Load plugins 6440 if (!t.isMenuVisible)
6441 if (s.plugins) { 6441 return;
6442 pl = explode(s.plugins); 6442
6443 6443 Event.remove(co, 'mouseover', t.mouseOverFunc);
6444 // Load compat2x first 6444 Event.remove(co, 'click', t.mouseClickFunc);
6445 if (tinymce.inArray(pl, 'compat2x') != -1) 6445 Event.remove(co, 'keydown', t._keyHandler);
6446 PluginManager.load('compat2x', 'plugins/compat2x/editor_plugin' + tinymce.suffix + '.js'); 6446 DOM.hide(co);
6447 6447 t.isMenuVisible = 0;
6448 // Load rest if plugins 6448
6449 each(pl, function(v) { 6449 if (!c)
6450 if (v && v.charAt(0) != '-' && !PluginManager.urls[v]) { 6450 t.collapse(1);
6451 // Skip safari plugin for other browsers 6451
6452 if (!tinymce.isWebKit && v == 'safari') 6452 if (t.element)
6453 return; 6453 t.element.hide();
6454 6454
6455 PluginManager.load(v, 'plugins/' + v + '/editor_plugin' + tinymce.suffix + '.js'); 6455 if (e = DOM.get(t.id))
6456 } 6456 DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');
6457 }); 6457
6458 } 6458 t.onHideMenu.dispatch(t);
6459 6459 },
6460 sl.loadQueue(); 6460
6461 } 6461 add : function(o) {
6462 6462 var t = this, co;
6463 // Legacy call 6463
6464 Event.add(document, 'init', function() { 6464 o = t.parent(o);
6465 var l, co; 6465
6466 6466 if (t.isRendered && (co = DOM.get('menu_' + t.id)))
6467 execCallback(s, 'onpageload'); 6467 t._add(DOM.select('tbody', co)[0], o);
6468 6468
6469 // Verify that it's a valid browser 6469 return o;
6470 if (s.browsers) { 6470 },
6471 l = false; 6471
6472 6472 collapse : function(d) {
6473 each(explode(s.browsers), function(v) { 6473 this.parent(d);
6474 switch (v) { 6474 this.hideMenu(1);
6475 case 'ie': 6475 },
6476 case 'msie': 6476
6477 if (tinymce.isIE) 6477 remove : function(o) {
6478 l = true; 6478 DOM.remove(o.id);
6479 break; 6479 this.destroy();
6480 6480
6481 case 'gecko': 6481 return this.parent(o);
6482 if (tinymce.isGecko) 6482 },
6483 l = true; 6483
6484 break; 6484 destroy : function() {
6485 6485 var t = this, co = DOM.get('menu_' + t.id);
6486 case 'safari': 6486
6487 case 'webkit': 6487 Event.remove(co, 'mouseover', t.mouseOverFunc);
6488 if (tinymce.isWebKit) 6488 Event.remove(co, 'click', t.mouseClickFunc);
6489 l = true; 6489
6490 break; 6490 if (t.element)
6491 6491 t.element.remove();
6492 case 'opera': 6492
6493 if (tinymce.isOpera) 6493 DOM.remove(co);
6494 l = true; 6494 },
6495 6495
6496 break; 6496 renderNode : function() {
6497 } 6497 var t = this, s = t.settings, n, tb, co, w;
6498 }); 6498
6499 6499 w = DOM.create('div', {id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000'});
6500 // Not a valid one 6500 co = DOM.add(w, 'div', {id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});
6501 if (!l) 6501 t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});
6502 return; 6502
6503 } 6503 if (s.menu_line)
6504 6504 DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});
6505 switch (s.mode) { 6505
6506 case "exact": 6506// n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});
6507 l = s.elements || ''; 6507 n = DOM.add(co, 'table', {id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});
6508 6508 tb = DOM.add(n, 'tbody');
6509 if(l.length > 0) { 6509
6510 each(explode(l), function(v) { 6510 each(t.items, function(o) {
6511 if (DOM.get(v)) { 6511 t._add(tb, o);
6512 ed = new tinymce.Editor(v, s); 6512 });
6513 el.push(ed); 6513
6514 ed.render(1); 6514 t.rendered = true;
6515 } else { 6515
6516 c = 0; 6516 return w;
6517 6517 },
6518 each(document.forms, function(f) { 6518
6519 each(f.elements, function(e) { 6519 // Internal functions
6520 if (e.name === v) { 6520
6521 v = 'mce_editor_' + c; 6521 _keyHandler : function(e) {
6522 DOM.setAttrib(e, 'id', v); 6522 var t = this, kc = e.keyCode;
6523 6523
6524 ed = new tinymce.Editor(v, s); 6524 function focus(d) {
6525 el.push(ed); 6525 var i = t._focusIdx + d, e = DOM.select('a', 'menu_' + t.id)[i];
6526 ed.render(1); 6526
6527 } 6527 if (e) {
6528 }); 6528 t._focusIdx = i;
6529 }); 6529 e.focus();
6530 } 6530 }
6531 }); 6531 };
6532 } 6532
6533 break; 6533 switch (kc) {
6534 6534 case 38:
6535 case "textareas": 6535 focus(-1); // Select first link
6536 case "specific_textareas": 6536 return;
6537 function hasClass(n, c) { 6537
6538 return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c); 6538 case 40:
6539 }; 6539 focus(1);
6540 6540 return;
6541 each(DOM.select('textarea'), function(v) { 6541
6542 if (s.editor_deselector && hasClass(v, s.editor_deselector)) 6542 case 13:
6543 return; 6543 return;
6544 6544
6545 if (!s.editor_selector || hasClass(v, s.editor_selector)) { 6545 case 27:
6546 // Can we use the name 6546 return this.hideMenu();
6547 e = DOM.get(v.name); 6547 }
6548 if (!v.id && !e) 6548 },
6549 v.id = v.name; 6549
6550 6550 _add : function(tb, o) {
6551 // Generate unique name if missing or already exists 6551 var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic;
6552 if (!v.id || t.get(v.id)) 6552
6553 v.id = DOM.uniqueId(); 6553 if (s.separator) {
6554 6554 ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});
6555 ed = new tinymce.Editor(v.id, s); 6555 DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});
6556 el.push(ed); 6556
6557 ed.render(1); 6557 if (n = ro.previousSibling)
6558 } 6558 DOM.addClass(n, 'mceLast');
6559 }); 6559
6560 break; 6560 return;
6561 } 6561 }
6562 6562
6563 // Call onInit when all editors are initialized 6563 n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});
6564 if (s.oninit) { 6564 n = it = DOM.add(n, 'td');
6565 l = co = 0; 6565 n = a = DOM.add(n, 'a', {href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});
6566 6566
6567 each (el, function(ed) { 6567 DOM.addClass(it, s['class']);
6568 co++; 6568// n = DOM.add(n, 'span', {'class' : 'item'});
6569 6569
6570 if (!ed.initialized) { 6570 ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});
6571 // Wait for it 6571
6572 ed.onInit.add(function() { 6572 if (s.icon_src)
6573 l++; 6573 DOM.add(ic, 'img', {src : s.icon_src});
6574 6574
6575 // All done 6575 n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);
6576 if (l == co) 6576
6577 execCallback(s, 'oninit'); 6577 if (o.settings.style)
6578 }); 6578 DOM.setAttrib(n, 'style', o.settings.style);
6579 } else 6579
6580 l++; 6580 if (tb.childNodes.length == 1)
6581 6581 DOM.addClass(ro, 'mceFirst');
6582 // All done 6582
6583 if (l == co) 6583 if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))
6584 execCallback(s, 'oninit'); 6584 DOM.addClass(ro, 'mceFirst');
6585 }); 6585
6586 } 6586 if (o.collapse)
6587 }); 6587 DOM.addClass(ro, cp + 'ItemSub');
6588 }, 6588
6589 6589 if (n = ro.previousSibling)
6590 get : function(id) { 6590 DOM.removeClass(n, 'mceLast');
6591 return this.editors[id]; 6591
6592 }, 6592 DOM.addClass(ro, 'mceLast');
6593 6593 }
6594 getInstanceById : function(id) { 6594 });
6595 return this.get(id); 6595})(tinymce);(function(tinymce) {
6596 }, 6596 var DOM = tinymce.DOM;
6597 6597
6598 add : function(e) { 6598 tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {
6599 this.editors[e.id] = e; 6599 Button : function(id, s) {
6600 this._setActive(e); 6600 this.parent(id, s);
6601 6601 this.classPrefix = 'mceButton';
6602 return e; 6602 },
6603 }, 6603
6604 6604 renderHTML : function() {
6605 remove : function(e) { 6605 var cp = this.classPrefix, s = this.settings, h, l;
6606 var t = this; 6606
6607 6607 l = DOM.encode(s.label || '');
6608 // Not in the collection 6608 h = '<a id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + (l ? ' ' + cp + 'Labeled' : '') +'" onmousedown="return false;" onclick="return false;" title="' + DOM.encode(s.title) + '">';
6609 if (!t.editors[e.id]) 6609
6610 return null; 6610 if (s.image)
6611 6611 h += '<img class="mceIcon" src="' + s.image + '" />' + l + '</a>';
6612 delete t.editors[e.id]; 6612 else
6613 6613 h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '') + '</a>';
6614 // Select another editor since the active one was removed 6614
6615 if (t.activeEditor == e) { 6615 return h;
6616 each(t.editors, function(e) { 6616 },
6617 t._setActive(e); 6617
6618 return false; // Break 6618 postRender : function() {
6619 }); 6619 var t = this, s = t.settings;
6620 } 6620
6621 6621 tinymce.dom.Event.add(t.id, 'click', function(e) {
6622 e.destroy(); 6622 if (!t.isDisabled())
6623 6623 return s.onclick.call(s.scope, e);
6624 return e; 6624 });
6625 }, 6625 }
6626 6626 });
6627 execCommand : function(c, u, v) { 6627})(tinymce);
6628 var t = this, ed = t.get(v), w; 6628(function(tinymce) {
6629 6629 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;
6630 // Manager commands 6630
6631 switch (c) { 6631 tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {
6632 case "mceFocus": 6632 ListBox : function(id, s) {
6633 ed.focus(); 6633 var t = this;
6634 return true; 6634
6635 6635 t.parent(id, s);
6636 case "mceAddEditor": 6636
6637 case "mceAddControl": 6637 t.items = [];
6638 if (!t.get(v)) 6638
6639 new tinymce.Editor(v, t.settings).render(); 6639 t.onChange = new Dispatcher(t);
6640 6640
6641 return true; 6641 t.onPostRender = new Dispatcher(t);
6642 6642
6643 case "mceAddFrameControl": 6643 t.onAdd = new Dispatcher(t);
6644 w = v.window; 6644
6645 6645 t.onRenderMenu = new tinymce.util.Dispatcher(this);
6646 // Add tinyMCE global instance and tinymce namespace to specified window 6646
6647 w.tinyMCE = tinyMCE; 6647 t.classPrefix = 'mceListBox';
6648 w.tinymce = tinymce; 6648 },
6649 6649
6650 tinymce.DOM.doc = w.document; 6650 select : function(va) {
6651 tinymce.DOM.win = w; 6651 var t = this, fv, f;
6652 6652
6653 ed = new tinymce.Editor(v.element_id, v); 6653 if (va == undefined)
6654 ed.render(); 6654 return t.selectByIndex(-1);
6655 6655
6656 // Fix IE memory leaks 6656 // Is string or number make function selector
6657 if (tinymce.isIE) { 6657 if (va && va.call)
6658 function clr() { 6658 f = va;
6659 ed.destroy(); 6659 else {
6660 w.detachEvent('onunload', clr); 6660 f = function(v) {
6661 w = w.tinyMCE = w.tinymce = null; // IE leak 6661 return v == va;
6662 }; 6662 };
6663 6663 }
6664 w.attachEvent('onunload', clr); 6664
6665 } 6665 // Do we need to do something?
6666 6666 if (va != t.selectedValue) {
6667 v.page_window = null; 6667 // Find item
6668 6668 each(t.items, function(o, i) {
6669 return true; 6669 if (f(o.value)) {
6670 6670 fv = 1;
6671 case "mceRemoveEditor": 6671 t.selectByIndex(i);
6672 case "mceRemoveControl": 6672 return false;
6673 if (ed) 6673 }
6674 ed.remove(); 6674 });
6675 6675
6676 return true; 6676 if (!fv)
6677 6677 t.selectByIndex(-1);
6678 case 'mceToggleEditor': 6678 }
6679 if (!ed) { 6679 },
6680 t.execCommand('mceAddControl', 0, v); 6680
6681 return true; 6681 selectByIndex : function(idx) {
6682 } 6682 var t = this, e, o;
6683 6683
6684 if (ed.isHidden()) 6684 if (idx != t.selectedIndex) {
6685 ed.show(); 6685 e = DOM.get(t.id + '_text');
6686 else 6686 o = t.items[idx];
6687 ed.hide(); 6687
6688 6688 if (o) {
6689 return true; 6689 t.selectedValue = o.value;
6690 } 6690 t.selectedIndex = idx;
6691 6691 DOM.setHTML(e, DOM.encode(o.title));
6692 // Run command on active editor 6692 DOM.removeClass(e, 'mceTitle');
6693 if (t.activeEditor) 6693 } else {
6694 return t.activeEditor.execCommand(c, u, v); 6694 DOM.setHTML(e, DOM.encode(t.settings.title));
6695 6695 DOM.addClass(e, 'mceTitle');
6696 return false; 6696 t.selectedValue = t.selectedIndex = null;
6697 }, 6697 }
6698 6698
6699 execInstanceCommand : function(id, c, u, v) { 6699 e = 0;
6700 var ed = this.get(id); 6700 }
6701 6701 },
6702 if (ed) 6702
6703 return ed.execCommand(c, u, v); 6703 add : function(n, v, o) {
6704 6704 var t = this;
6705 return false; 6705
6706 }, 6706 o = o || {};
6707 6707 o = tinymce.extend(o, {
6708 triggerSave : function() { 6708 title : n,
6709 each(this.editors, function(e) { 6709 value : v
6710 e.save(); 6710 });
6711 }); 6711
6712 }, 6712 t.items.push(o);
6713 6713 t.onAdd.dispatch(t, o);
6714 addI18n : function(p, o) { 6714 },
6715 var lo, i18n = this.i18n; 6715
6716 6716 getLength : function() {
6717 if (!tinymce.is(p, 'string')) { 6717 return this.items.length;
6718 each(p, function(o, lc) { 6718 },
6719 each(o, function(o, g) { 6719
6720 each(o, function(o, k) { 6720 renderHTML : function() {
6721 if (g === 'common') 6721 var h = '', t = this, s = t.settings, cp = t.classPrefix;
6722 i18n[lc + '.' + k] = o; 6722
6723 else 6723 h = '<table id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>';
6724 i18n[lc + '.' + g + '.' + k] = o; 6724 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>';
6725 }); 6725 h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span></span>') + '</td>';
6726 }); 6726 h += '</tr></tbody></table>';
6727 }); 6727
6728 } else { 6728 return h;
6729 each(o, function(o, k) { 6729 },
6730 i18n[p + '.' + k] = o; 6730
6731 }); 6731 showMenu : function() {
6732 } 6732 var t = this, p1, p2, e = DOM.get(this.id), m;
6733 }, 6733
6734 6734 if (t.isDisabled() || t.items.length == 0)
6735 // Private methods 6735 return;
6736 6736
6737 _setActive : function(e) { 6737 if (t.menu && t.menu.isMenuVisible)
6738 this.selectedInstance = this.activeEditor = e; 6738 return t.hideMenu();
6739 } 6739
6740 6740 if (!t.isMenuRendered) {
6741 }); 6741 t.renderMenu();
6742 6742 t.isMenuRendered = true;
6743 tinymce.EditorManager.preInit(); 6743 }
6744})(); 6744
6745 6745 p1 = DOM.getPos(this.settings.menu_container);
6746// Short for editor manager window.tinyMCE is needed when TinyMCE gets loaded though a XHR call 6746 p2 = DOM.getPos(e);
6747var tinyMCE = window.tinyMCE = tinymce.EditorManager; 6747
6748 6748 m = t.menu;
6749/* file:jscripts/tiny_mce/classes/Editor.js */ 6749 m.settings.offset_x = p2.x;
6750 6750 m.settings.offset_y = p2.y;
6751(function() { 6751 m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus
6752 var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, Dispatcher = tinymce.util.Dispatcher; 6752
6753 var each = tinymce.each, isGecko = tinymce.isGecko, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit; 6753 // Select in menu
6754 var is = tinymce.is, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, EditorManager = tinymce.EditorManager; 6754 if (t.oldID)
6755 var inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode; 6755 m.items[t.oldID].setSelected(0);
6756 6756
6757 tinymce.create('tinymce.Editor', { 6757 each(t.items, function(o) {
6758 Editor : function(id, s) { 6758 if (o.value === t.selectedValue) {
6759 var t = this; 6759 m.items[o.id].setSelected(1);
6760 6760 t.oldID = o.id;
6761 t.id = t.editorId = id; 6761 }
6762 t.execCommands = {}; 6762 });
6763 t.queryStateCommands = {}; 6763
6764 t.queryValueCommands = {}; 6764 m.showMenu(0, e.clientHeight);
6765 t.plugins = {}; 6765
6766 6766 Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
6767 // Add events to the editor 6767 DOM.addClass(t.id, t.classPrefix + 'Selected');
6768 each([ 6768
6769 'onPreInit', 6769 //DOM.get(t.id + '_text').focus();
6770 'onBeforeRenderUI', 6770 },
6771 'onPostRender', 6771
6772 'onInit', 6772 hideMenu : function(e) {
6773 'onRemove', 6773 var t = this;
6774 'onActivate', 6774
6775 'onDeactivate', 6775 // Prevent double toogles by canceling the mouse click event to the button
6776 'onClick', 6776 if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))
6777 'onEvent', 6777 return;
6778 'onMouseUp', 6778
6779 'onMouseDown', 6779 if (!e || !DOM.getParent(e.target, '.mceMenu')) {
6780 'onDblClick', 6780 DOM.removeClass(t.id, t.classPrefix + 'Selected');
6781 'onKeyDown', 6781 Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);
6782 'onKeyUp', 6782
6783 'onKeyPress', 6783 if (t.menu)
6784 'onContextMenu', 6784 t.menu.hideMenu();
6785 'onSubmit', 6785 }
6786 'onReset', 6786 },
6787 'onPaste', 6787
6788 'onPreProcess', 6788 renderMenu : function() {
6789 'onPostProcess', 6789 var t = this, m;
6790 'onBeforeSetContent', 6790
6791 'onBeforeGetContent', 6791 m = t.settings.control_manager.createDropMenu(t.id + '_menu', {
6792 'onSetContent', 6792 menu_line : 1,
6793 'onGetContent', 6793 'class' : t.classPrefix + 'Menu mceNoIcons',
6794 'onLoadContent', 6794 max_width : 150,
6795 'onSaveContent', 6795 max_height : 150
6796 'onNodeChange', 6796 });
6797 'onChange', 6797
6798 'onBeforeExecCommand', 6798 m.onHideMenu.add(t.hideMenu, t);
6799 'onExecCommand', 6799
6800 'onUndo', 6800 m.add({
6801 'onRedo', 6801 title : t.settings.title,
6802 'onVisualAid', 6802 'class' : 'mceMenuItemTitle',
6803 'onSetProgressState' 6803 onclick : function() {
6804 ], function(e) { 6804 if (t.settings.onselect('') !== false)
6805 t[e] = new Dispatcher(t); 6805 t.select(''); // Must be runned after
6806 }); 6806 }
6807 6807 });
6808 // Default editor config 6808
6809 t.settings = s = extend({ 6809 each(t.items, function(o) {
6810 id : id, 6810 o.id = DOM.uniqueId();
6811 language : 'en', 6811 o.onclick = function() {
6812 docs_language : 'en', 6812 if (t.settings.onselect(o.value) !== false)
6813 theme : 'simple', 6813 t.select(o.value); // Must be runned after
6814 skin : 'default', 6814 };
6815 delta_width : 0, 6815
6816 delta_height : 0, 6816 m.add(o);
6817 popup_css : '', 6817 });
6818 plugins : '', 6818
6819 document_base_url : tinymce.documentBaseURL, 6819 t.onRenderMenu.dispatch(t, m);
6820 add_form_submit_trigger : 1, 6820 t.menu = m;
6821 submit_patch : 1, 6821 },
6822 add_unload_trigger : 1, 6822
6823 convert_urls : 1, 6823 postRender : function() {
6824 relative_urls : 1, 6824 var t = this, cp = t.classPrefix;
6825 remove_script_host : 1, 6825
6826 table_inline_editing : 0, 6826 Event.add(t.id, 'click', t.showMenu, t);
6827 object_resizing : 1, 6827 Event.add(t.id + '_text', 'focus', function(e) {
6828 cleanup : 1, 6828 if (!t._focused) {
6829 accessibility_focus : 1, 6829 t.keyDownHandler = Event.add(t.id + '_text', 'keydown', function(e) {
6830 custom_shortcuts : 1, 6830 var idx = -1, v, kc = e.keyCode;
6831 custom_undo_redo_keyboard_shortcuts : 1, 6831
6832 custom_undo_redo_restore_selection : 1, 6832 // Find current index
6833 custom_undo_redo : 1, 6833 each(t.items, function(v, i) {
6834 doctype : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', 6834 if (t.selectedValue == v.value)
6835 visual_table_class : 'mceItemTable', 6835 idx = i;
6836 visual : 1, 6836 });
6837 inline_styles : true, 6837
6838 convert_fonts_to_spans : true, 6838 // Move up/down
6839 font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large', 6839 if (kc == 38)
6840 apply_source_formatting : 1, 6840 v = t.items[idx - 1];
6841 directionality : 'ltr', 6841 else if (kc == 40)
6842 forced_root_block : 'p', 6842 v = t.items[idx + 1];
6843 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[cite],-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],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|tabindex|accesskey],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', 6843 else if (kc == 13) {
6844 hidden_input : 1, 6844 // Fake select on enter
6845 padd_empty_editor : 1, 6845 v = t.selectedValue;
6846 render_ui : 1, 6846 t.selectedValue = null; // Needs to be null to fake change
6847 init_theme : 1, 6847 t.settings.onselect(v);
6848 force_p_newlines : 1, 6848 return Event.cancel(e);
6849 indentation : '30px', 6849 }
6850 keep_styles : 1 6850
6851 }, s); 6851 if (v) {
6852 6852 t.hideMenu();
6853 // Setup URIs 6853 t.select(v.value);
6854 t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, { 6854 }
6855 base_uri : tinyMCE.baseURI 6855 });
6856 }); 6856 }
6857 t.baseURI = EditorManager.baseURI; 6857
6858 6858 t._focused = 1;
6859 // Call setup 6859 });
6860 t.execCallback('setup', t); 6860 Event.add(t.id + '_text', 'blur', function() {Event.remove(t.id + '_text', 'keydown', t.keyDownHandler); t._focused = 0;});
6861 }, 6861
6862 6862 // Old IE doesn't have hover on all elements
6863 render : function(nst) { 6863 if (tinymce.isIE6 || !DOM.boxModel) {
6864 var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader; 6864 Event.add(t.id, 'mouseover', function() {
6865 6865 if (!DOM.hasClass(t.id, cp + 'Disabled'))
6866 // Page is not loaded yet, wait for it 6866 DOM.addClass(t.id, cp + 'Hover');
6867 if (!Event.domLoaded) { 6867 });
6868 Event.add(document, 'init', function() { 6868
6869 t.render(); 6869 Event.add(t.id, 'mouseout', function() {
6870 }); 6870 if (!DOM.hasClass(t.id, cp + 'Disabled'))
6871 return; 6871 DOM.removeClass(t.id, cp + 'Hover');
6872 } 6872 });
6873 6873 }
6874 // Force strict loading mode if render us called by user and not internally 6874
6875 if (!nst) { 6875 t.onPostRender.dispatch(t, DOM.get(t.id));
6876 s.strict_loading_mode = 1; 6876 },
6877 tinyMCE.settings = s; 6877
6878 } 6878 destroy : function() {
6879 6879 this.parent();
6880 // Element not found, then skip initialization 6880
6881 if (!t.getElement()) 6881 Event.clear(this.id + '_text');
6882 return; 6882 Event.clear(this.id + '_open');
6883 6883 }
6884 if (s.strict_loading_mode) { 6884 });
6885 sl.settings.strict_mode = s.strict_loading_mode; 6885})(tinymce);(function(tinymce) {
6886 tinymce.DOM.settings.strict = 1; 6886 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;
6887 } 6887
6888 6888 tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {
6889 // Add hidden input for non input elements inside form elements 6889 NativeListBox : function(id, s) {
6890 if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form')) 6890 this.parent(id, s);
6891 DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id); 6891 this.classPrefix = 'mceNativeListBox';
6892 6892 },
6893 t.windowManager = new tinymce.WindowManager(t); 6893
6894 6894 setDisabled : function(s) {
6895 if (s.encoding == 'xml') { 6895 DOM.get(this.id).disabled = s;
6896 t.onGetContent.add(function(ed, o) { 6896 },
6897 if (o.save) 6897
6898 o.content = DOM.encode(o.content); 6898 isDisabled : function() {
6899 }); 6899 return DOM.get(this.id).disabled;
6900 } 6900 },
6901 6901
6902 if (s.add_form_submit_trigger) { 6902 select : function(va) {
6903 t.onSubmit.addToTop(function() { 6903 var t = this, fv, f;
6904 if (t.initialized) { 6904
6905 t.save(); 6905 if (va == undefined)
6906 t.isNotDirty = 1; 6906 return t.selectByIndex(-1);
6907 } 6907
6908 }); 6908 // Is string or number make function selector
6909 } 6909 if (va && va.call)
6910 6910 f = va;
6911 if (s.add_unload_trigger && !s.ask) { 6911 else {
6912 t._beforeUnload = tinyMCE.onBeforeUnload.add(function() { 6912 f = function(v) {
6913 if (t.initialized && !t.destroyed && !t.isHidden()) 6913 return v == va;
6914 t.save({format : 'raw', no_events : true}); 6914 };
6915 }); 6915 }
6916 } 6916
6917 6917 // Do we need to do something?
6918 tinymce.addUnload(t.destroy, t); 6918 if (va != t.selectedValue) {
6919 6919 // Find item
6920 if (s.submit_patch) { 6920 each(t.items, function(o, i) {
6921 t.onBeforeRenderUI.add(function() { 6921 if (f(o.value)) {
6922 var n = t.getElement().form; 6922 fv = 1;
6923 6923 t.selectByIndex(i);
6924 if (!n) 6924 return false;
6925 return; 6925 }
6926 6926 });
6927 // Already patched 6927
6928 if (n._mceOldSubmit) 6928 if (!fv)
6929 return; 6929 t.selectByIndex(-1);
6930 6930 }
6931 // Check page uses id="submit" or name="submit" for it's submit button 6931 },
6932 if (!n.submit.nodeType && !n.submit.length) { 6932
6933 t.formElement = n; 6933 selectByIndex : function(idx) {
6934 n._mceOldSubmit = n.submit; 6934 DOM.get(this.id).selectedIndex = idx + 1;
6935 n.submit = function() { 6935 this.selectedValue = this.items[idx] ? this.items[idx].value : null;
6936 // Save all instances 6936 },
6937 EditorManager.triggerSave(); 6937
6938 t.isNotDirty = 1; 6938 add : function(n, v, a) {
6939 6939 var o, t = this;
6940 return this._mceOldSubmit(this); 6940
6941 }; 6941 a = a || {};
6942 } 6942 a.value = v;
6943 6943
6944 n = null; 6944 if (t.isRendered())
6945 }); 6945 DOM.add(DOM.get(this.id), 'option', a, n);
6946 } 6946
6947 6947 o = {
6948 // Load scripts 6948 title : n,
6949 function loadScripts() { 6949 value : v,
6950 if (s.language) 6950 attribs : a
6951 sl.add(tinymce.baseURL + '/langs/' + s.language + '.js'); 6951 };
6952 6952
6953 if (s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme]) 6953 t.items.push(o);
6954 ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js'); 6954 t.onAdd.dispatch(t, o);
6955 6955 },
6956 each(explode(s.plugins), function(p) { 6956
6957 if (p && p.charAt(0) != '-' && !PluginManager.urls[p]) { 6957 getLength : function() {
6958 // Skip safari plugin for other browsers 6958 return DOM.get(this.id).options.length - 1;
6959 if (!isWebKit && p == 'safari') 6959 },
6960 return; 6960
6961 6961 renderHTML : function() {
6962 PluginManager.load(p, 'plugins/' + p + '/editor_plugin' + tinymce.suffix + '.js'); 6962 var h, t = this;
6963 } 6963
6964 }); 6964 h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');
6965 6965
6966 // Init when que is loaded 6966 each(t.items, function(it) {
6967 sl.loadQueue(function() { 6967 h += DOM.createHTML('option', {value : it.value}, it.title);
6968 if (s.ask) { 6968 });
6969 function ask() { 6969
6970 // Yield for awhile to avoid focus bug on FF 3 when cancel is pressed 6970 h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox'}, h);
6971 window.setTimeout(function() { 6971
6972 Event.remove(t.id, 'focus', ask); 6972 return h;
6973 6973 },
6974 t.windowManager.confirm(t.getLang('edit_confirm'), function(s) { 6974
6975 if (s) 6975 postRender : function() {
6976 t.init(); 6976 var t = this, ch;
6977 }); 6977
6978 }, 0); 6978 t.rendered = true;
6979 }; 6979
6980 6980 function onChange(e) {
6981 Event.add(t.id, 'focus', ask); 6981 var v = t.items[e.target.selectedIndex - 1];
6982 return; 6982
6983 } 6983 if (v && (v = v.value)) {
6984 6984 t.onChange.dispatch(t, v);
6985 if (!t.removed) 6985
6986 t.init(); 6986 if (t.settings.onselect)
6987 }); 6987 t.settings.onselect(v);
6988 }; 6988 }
6989 6989 };
6990 // Load compat2x first 6990
6991 if (s.plugins.indexOf('compat2x') != -1) { 6991 Event.add(t.id, 'change', onChange);
6992 PluginManager.load('compat2x', 'plugins/compat2x/editor_plugin' + tinymce.suffix + '.js'); 6992
6993 sl.loadQueue(loadScripts); 6993 // Accessibility keyhandler
6994 } else 6994 Event.add(t.id, 'keydown', function(e) {
6995 loadScripts(); 6995 var bf;
6996 }, 6996
6997 6997 Event.remove(t.id, 'change', ch);
6998 init : function() { 6998
6999 var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re; 6999 bf = Event.add(t.id, 'blur', function() {
7000 7000 Event.add(t.id, 'change', onChange);
7001 EditorManager.add(t); 7001 Event.remove(t.id, 'blur', bf);
7002 7002 });
7003 // Create theme 7003
7004 s.theme = s.theme.replace(/-/, ''); 7004 if (e.keyCode == 13 || e.keyCode == 32) {
7005 o = ThemeManager.get(s.theme); 7005 onChange(e);
7006 t.theme = new o(); 7006 return Event.cancel(e);
7007 7007 }
7008 if (t.theme.init && s.init_theme) 7008 });
7009 t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, '')); 7009
7010 7010 t.onPostRender.dispatch(t, DOM.get(t.id));
7011 // Create all plugins 7011 }
7012 each(explode(s.plugins.replace(/\-/g, '')), function(p) { 7012 });
7013 var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po; 7013})(tinymce);(function(tinymce) {
7014 7014 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;
7015 if (c) { 7015
7016 po = new c(t, u); 7016 tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {
7017 7017 MenuButton : function(id, s) {
7018 t.plugins[p] = po; 7018 this.parent(id, s);
7019 7019
7020 if (po.init) 7020 this.onRenderMenu = new tinymce.util.Dispatcher(this);
7021 po.init(t, u); 7021
7022 } 7022 s.menu_container = s.menu_container || DOM.doc.body;
7023 }); 7023 },
7024 7024
7025 // Setup popup CSS path(s) 7025 showMenu : function() {
7026 if (s.popup_css !== false) { 7026 var t = this, p1, p2, e = DOM.get(t.id), m;
7027 if (s.popup_css) 7027
7028 s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css); 7028 if (t.isDisabled())
7029 else 7029 return;
7030 s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css"); 7030
7031 } 7031 if (!t.isMenuRendered) {
7032 7032 t.renderMenu();
7033 if (s.popup_css_add) 7033 t.isMenuRendered = true;
7034 s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add); 7034 }
7035 7035
7036 // Setup control factory 7036 if (t.isMenuVisible)
7037 t.controlManager = new tinymce.ControlManager(t); 7037 return t.hideMenu();
7038 t.undoManager = new tinymce.UndoManager(t); 7038
7039 7039 p1 = DOM.getPos(t.settings.menu_container);
7040 // Pass through 7040 p2 = DOM.getPos(e);
7041 t.undoManager.onAdd.add(function(um, l) { 7041
7042 if (!l.initial) 7042 m = t.menu;
7043 return t.onChange.dispatch(t, l, um); 7043 m.settings.offset_x = p2.x;
7044 }); 7044 m.settings.offset_y = p2.y;
7045 7045 m.settings.vp_offset_x = p2.x;
7046 t.undoManager.onUndo.add(function(um, l) { 7046 m.settings.vp_offset_y = p2.y;
7047 return t.onUndo.dispatch(t, l, um); 7047 m.settings.keyboard_focus = t._focused;
7048 }); 7048 m.showMenu(0, e.clientHeight);
7049 7049
7050 t.undoManager.onRedo.add(function(um, l) { 7050 Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
7051 return t.onRedo.dispatch(t, l, um); 7051 t.setState('Selected', 1);
7052 }); 7052
7053 7053 t.isMenuVisible = 1;
7054 if (s.custom_undo_redo) { 7054 },
7055 t.onExecCommand.add(function(ed, cmd, ui, val, a) { 7055
7056 if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo)) 7056 renderMenu : function() {
7057 t.undoManager.add(); 7057 var t = this, m;
7058 }); 7058
7059 } 7059 m = t.settings.control_manager.createDropMenu(t.id + '_menu', {
7060 7060 menu_line : 1,
7061 t.onExecCommand.add(function(ed, c) { 7061 'class' : this.classPrefix + 'Menu',
7062 // Don't refresh the select lists until caret move 7062 icons : t.settings.icons
7063 if (!/^(FontName|FontSize)$/.test(c)) 7063 });
7064 t.nodeChanged(); 7064
7065 }); 7065 m.onHideMenu.add(t.hideMenu, t);
7066 7066
7067 // Remove ghost selections on images and tables in Gecko 7067 t.onRenderMenu.dispatch(t, m);
7068 if (isGecko) { 7068 t.menu = m;
7069 function repaint(a, o) { 7069 },
7070 if (!o || !o.initial) 7070
7071 t.execCommand('mceRepaint'); 7071 hideMenu : function(e) {
7072 }; 7072 var t = this;
7073 7073
7074 t.onUndo.add(repaint); 7074 // Prevent double toogles by canceling the mouse click event to the button
7075 t.onRedo.add(repaint); 7075 if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))
7076 t.onSetContent.add(repaint); 7076 return;
7077 } 7077
7078 7078 if (!e || !DOM.getParent(e.target, '.mceMenu')) {
7079 // Enables users to override the control factory 7079 t.setState('Selected', 0);
7080 t.onBeforeRenderUI.dispatch(t, t.controlManager); 7080 Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);
7081 7081 if (t.menu)
7082 // Measure box 7082 t.menu.hideMenu();
7083 if (s.render_ui) { 7083 }
7084 w = s.width || e.style.width || e.offsetWidth; 7084
7085 h = s.height || e.style.height || e.offsetHeight; 7085 t.isMenuVisible = 0;
7086 t.orgDisplay = e.style.display; 7086 },
7087 re = /^[0-9\.]+(|px)$/i; 7087
7088 7088 postRender : function() {
7089 if (re.test('' + w)) 7089 var t = this, s = t.settings;
7090 w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100); 7090
7091 7091 Event.add(t.id, 'click', function() {
7092 if (re.test('' + h)) 7092 if (!t.isDisabled()) {
7093 h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100); 7093 if (s.onclick)
7094 7094 s.onclick(t.value);
7095 // Render UI 7095
7096 o = t.theme.renderUI({ 7096 t.showMenu();
7097 targetNode : e, 7097 }
7098 width : w, 7098 });
7099 height : h, 7099 }
7100 deltaWidth : s.delta_width, 7100 });
7101 deltaHeight : s.delta_height 7101})(tinymce);
7102 }); 7102(function(tinymce) {
7103 7103 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;
7104 t.editorContainer = o.editorContainer; 7104
7105 } 7105 tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {
7106 7106 SplitButton : function(id, s) {
7107 7107 this.parent(id, s);
7108 // Resize editor 7108 this.classPrefix = 'mceSplitButton';
7109 DOM.setStyles(o.sizeContainer || o.editorContainer, { 7109 },
7110 width : w, 7110
7111 height : h 7111 renderHTML : function() {
7112 }); 7112 var h, t = this, s = t.settings, h1;
7113 7113
7114 h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : ''); 7114 h = '<tbody><tr>';
7115 if (h < 100) 7115
7116 h = 100; 7116 if (s.image)
7117 7117 h1 = DOM.createHTML('img ', {src : s.image, 'class' : 'mceAction ' + s['class']});
7118 t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + t.documentBaseURI.getURI() + '" />'; 7118 else
7119 t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />'; 7119 h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');
7120 7120
7121 if (tinymce.relaxedDomain) 7121 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>';
7122 t.iframeHTML += '<script type="text/javascript">document.domain = "' + tinymce.relaxedDomain + '";</script>'; 7122
7123 7123 h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']});
7124 bi = s.body_id || 'tinymce'; 7124 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>';
7125 if (bi.indexOf('=') != -1) { 7125
7126 bi = t.getParam('body_id', '', 'hash'); 7126 h += '</tr></tbody>';
7127 bi = bi[t.id] || bi; 7127
7128 } 7128 return DOM.createHTML('table', {id : t.id, 'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', onmousedown : 'return false;', title : s.title}, h);
7129 7129 },
7130 bc = s.body_class || ''; 7130
7131 if (bc.indexOf('=') != -1) { 7131 postRender : function() {
7132 bc = t.getParam('body_class', '', 'hash'); 7132 var t = this, s = t.settings;
7133 bc = bc[t.id] || ''; 7133
7134 } 7134 if (s.onclick) {
7135 7135 Event.add(t.id + '_action', 'click', function() {
7136 t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '"></body></html>'; 7136 if (!t.isDisabled())
7137 7137 s.onclick(t.value);
7138 // Domain relaxing enabled, then set document domain 7138 });
7139 if (tinymce.relaxedDomain) { 7139 }
7140 // We need to write the contents here in IE since multiple writes messes up refresh button and back button 7140
7141 if (isIE || (tinymce.isOpera && parseFloat(opera.version()) >= 9.5)) 7141 Event.add(t.id + '_open', 'click', t.showMenu, t);
7142 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();})()'; 7142 Event.add(t.id + '_open', 'focus', function() {t._focused = 1;});
7143 else if (tinymce.isOpera) 7143 Event.add(t.id + '_open', 'blur', function() {t._focused = 0;});
7144 u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();ed.setupIframe();})()'; 7144
7145 } 7145 // Old IE doesn't have hover on all elements
7146 7146 if (tinymce.isIE6 || !DOM.boxModel) {
7147 // Create iframe 7147 Event.add(t.id, 'mouseover', function() {
7148 n = DOM.add(o.iframeContainer, 'iframe', { 7148 if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))
7149 id : t.id + "_ifr", 7149 DOM.addClass(t.id, 'mceSplitButtonHover');
7150 src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7 7150 });
7151 frameBorder : '0', 7151
7152 style : { 7152 Event.add(t.id, 'mouseout', function() {
7153 width : '100%', 7153 if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))
7154 height : h 7154 DOM.removeClass(t.id, 'mceSplitButtonHover');
7155 } 7155 });
7156 }); 7156 }
7157 7157 },
7158 t.contentAreaContainer = o.iframeContainer; 7158
7159 DOM.get(o.editorContainer).style.display = t.orgDisplay; 7159 destroy : function() {
7160 DOM.get(t.id).style.display = 'none'; 7160 this.parent();
7161 7161
7162 // Safari 2.x requires us to wait for the load event and load a real HTML doc 7162 Event.clear(this.id + '_action');
7163 if (tinymce.isOldWebKit) { 7163 Event.clear(this.id + '_open');
7164 Event.add(n, 'load', t.setupIframe, t); 7164 }
7165 n.src = tinymce.baseURL + '/plugins/safari/blank.htm'; 7165 });
7166 } else { 7166})(tinymce);
7167 if (!isIE || !tinymce.relaxedDomain) 7167(function(tinymce) {
7168 t.setupIframe(); 7168 var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;
7169 7169
7170 e = n = o = null; // Cleanup 7170 tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {
7171 } 7171 ColorSplitButton : function(id, s) {
7172 }, 7172 var t = this;
7173 7173
7174 setupIframe : function() { 7174 t.parent(id, s);
7175 var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b; 7175
7176 7176 t.settings = s = tinymce.extend({
7177 // Setup iframe body 7177 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',
7178 if (!isIE || !tinymce.relaxedDomain) { 7178 grid_width : 8,
7179 d.open(); 7179 default_color : '#888888'
7180 d.write(t.iframeHTML); 7180 }, t.settings);
7181 d.close(); 7181
7182 } 7182 t.onShowMenu = new tinymce.util.Dispatcher(t);
7183 7183
7184 // Design mode needs to be added here Ctrl+A will fail otherwise 7184 t.onHideMenu = new tinymce.util.Dispatcher(t);
7185 if (!isIE) { 7185
7186 try { 7186 t.value = s.default_color;
7187 if (!s.readonly) 7187 },
7188 d.designMode = 'On'; 7188
7189 } catch (ex) { 7189 showMenu : function() {
7190 // Will fail on Gecko if the editor is placed in an hidden container element 7190 var t = this, r, p, e, p2;
7191 // The design mode will be set ones the editor is focused 7191
7192 } 7192 if (t.isDisabled())
7193 } 7193 return;
7194 7194
7195 // IE needs to use contentEditable or it will display non secure items for HTTPS 7195 if (!t.isMenuRendered) {
7196 if (isIE) { 7196 t.renderMenu();
7197 // It will not steal focus if we hide it while setting contentEditable 7197 t.isMenuRendered = true;
7198 b = t.getBody(); 7198 }
7199 DOM.hide(b); 7199
7200 7200 if (t.isMenuVisible)
7201 if (!s.readonly) 7201 return t.hideMenu();
7202 b.contentEditable = true; 7202
7203 7203 e = DOM.get(t.id);
7204 DOM.show(b); 7204 DOM.show(t.id + '_menu');
7205 } 7205 DOM.addClass(e, 'mceSplitButtonSelected');
7206 7206 p2 = DOM.getPos(e);
7207 // Setup objects 7207 DOM.setStyles(t.id + '_menu', {
7208 t.dom = new tinymce.DOM.DOMUtils(t.getDoc(), { 7208 left : p2.x,
7209 keep_values : true, 7209 top : p2.y + e.clientHeight,
7210 url_converter : t.convertURL, 7210 zIndex : 200000
7211 url_converter_scope : t, 7211 });
7212 hex_colors : s.force_hex_style_colors, 7212 e = 0;
7213 class_filter : s.class_filter, 7213
7214 update_styles : 1, 7214 Event.add(DOM.doc, 'mousedown', t.hideMenu, t);
7215 fix_ie_paragraphs : 1 7215 t.onShowMenu.dispatch(t);
7216 }); 7216
7217 7217 if (t._focused) {
7218 t.serializer = new tinymce.dom.Serializer({ 7218 t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {
7219 entity_encoding : s.entity_encoding, 7219 if (e.keyCode == 27)
7220 entities : s.entities, 7220 t.hideMenu();
7221 valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements, 7221 });
7222 extended_valid_elements : s.extended_valid_elements, 7222
7223 valid_child_elements : s.valid_child_elements, 7223 DOM.select('a', t.id + '_menu')[0].focus(); // Select first link
7224 invalid_elements : s.invalid_elements, 7224 }
7225 fix_table_elements : s.fix_table_elements, 7225
7226 fix_list_elements : s.fix_list_elements, 7226 t.isMenuVisible = 1;
7227 fix_content_duplication : s.fix_content_duplication, 7227 },
7228 convert_fonts_to_spans : s.convert_fonts_to_spans, 7228
7229 font_size_classes : s.font_size_classes, 7229 hideMenu : function(e) {
7230 font_size_style_values : s.font_size_style_values, 7230 var t = this;
7231 apply_source_formatting : s.apply_source_formatting, 7231
7232 remove_linebreaks : s.remove_linebreaks, 7232 // Prevent double toogles by canceling the mouse click event to the button
7233 element_format : s.element_format, 7233 if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))
7234 dom : t.dom 7234 return;
7235 }); 7235
7236 7236 if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {
7237 t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer); 7237 DOM.removeClass(t.id, 'mceSplitButtonSelected');
7238 t.forceBlocks = new tinymce.ForceBlocks(t, { 7238 Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);
7239 forced_root_block : s.forced_root_block 7239 Event.remove(t.id + '_menu', 'keydown', t._keyHandler);
7240 }); 7240 DOM.hide(t.id + '_menu');
7241 t.editorCommands = new tinymce.EditorCommands(t); 7241 }
7242 7242
7243 // Pass through 7243 t.onHideMenu.dispatch(t);
7244 t.serializer.onPreProcess.add(function(se, o) { 7244
7245 return t.onPreProcess.dispatch(t, o, se); 7245 t.isMenuVisible = 0;
7246 }); 7246 },
7247 7247
7248 t.serializer.onPostProcess.add(function(se, o) { 7248 renderMenu : function() {
7249 return t.onPostProcess.dispatch(t, o, se); 7249 var t = this, m, i = 0, s = t.settings, n, tb, tr, w;
7250 }); 7250
7251 7251 w = DOM.add(s.menu_container, 'div', {id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});
7252 t.onPreInit.dispatch(t); 7252 m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});
7253 7253 DOM.add(m, 'span', {'class' : 'mceMenuLine'});
7254 if (!s.gecko_spellcheck) 7254
7255 t.getBody().spellcheck = 0; 7255 n = DOM.add(m, 'table', {'class' : 'mceColorSplitMenu'});
7256 7256 tb = DOM.add(n, 'tbody');
7257 if (!s.readonly) 7257
7258 t._addEvents(); 7258 // Generate color grid
7259 7259 i = 0;
7260 t.controlManager.onPostRender.dispatch(t, t.controlManager); 7260 each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {
7261 t.onPostRender.dispatch(t); 7261 c = c.replace(/^#/, '');
7262 7262
7263 if (s.directionality) 7263 if (!i--) {
7264 t.getBody().dir = s.directionality; 7264 tr = DOM.add(tb, 'tr');
7265 7265 i = s.grid_width - 1;
7266 if (s.nowrap) 7266 }
7267 t.getBody().style.whiteSpace = "nowrap"; 7267
7268 7268 n = DOM.add(tr, 'td');
7269 if (s.auto_resize) 7269
7270 t.onNodeChange.add(t.resizeToContent, t); 7270 n = DOM.add(n, 'a', {
7271 7271 href : 'javascript:;',
7272 if (s.custom_elements) { 7272 style : {
7273 function handleCustom(ed, o) { 7273 backgroundColor : '#' + c
7274 each(explode(s.custom_elements), function(v) { 7274 },
7275 var n; 7275 mce_color : '#' + c
7276 7276 });
7277 if (v.indexOf('~') === 0) { 7277 });
7278 v = v.substring(1); 7278
7279 n = 'span'; 7279 if (s.more_colors_func) {
7280 } else 7280 n = DOM.add(tb, 'tr');
7281 n = 'div'; 7281 n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});
7282 7282 n = DOM.add(n, 'a', {id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);
7283 o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' mce_name="$1"$2>'); 7283
7284 o.content = o.content.replace(new RegExp('</(' + v + ')>', 'g'), '</' + n + '>'); 7284 Event.add(n, 'click', function(e) {
7285 }); 7285 s.more_colors_func.call(s.more_colors_scope || this);
7286 }; 7286 return Event.cancel(e); // Cancel to fix onbeforeunload problem
7287 7287 });
7288 t.onBeforeSetContent.add(handleCustom); 7288 }
7289 t.onPostProcess.add(function(ed, o) { 7289
7290 if (o.set) 7290 DOM.addClass(m, 'mceColorSplitMenu');
7291 handleCustom(ed, o) 7291
7292 }); 7292 Event.add(t.id + '_menu', 'click', function(e) {
7293 } 7293 var c;
7294 7294
7295 if (s.handle_node_change_callback) { 7295 e = e.target;
7296 t.onNodeChange.add(function(ed, cm, n) { 7296
7297 t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed()); 7297 if (e.nodeName == 'A' && (c = e.getAttribute('mce_color')))
7298 }); 7298 t.setColor(c);
7299 } 7299
7300 7300 return Event.cancel(e); // Prevent IE auto save warning
7301 if (s.save_callback) { 7301 });
7302 t.onSaveContent.add(function(ed, o) { 7302
7303 var h = t.execCallback('save_callback', t.id, o.content, t.getBody()); 7303 return w;
7304 7304 },
7305 if (h) 7305
7306 o.content = h; 7306 setColor : function(c) {
7307 }); 7307 var t = this;
7308 } 7308
7309 7309 DOM.setStyle(t.id + '_preview', 'backgroundColor', c);
7310 if (s.onchange_callback) { 7310
7311 t.onChange.add(function(ed, l) { 7311 t.value = c;
7312 t.execCallback('onchange_callback', t, l); 7312 t.hideMenu();
7313 }); 7313 t.settings.onselect(c);
7314 } 7314 },
7315 7315
7316 if (s.convert_newlines_to_brs) { 7316 postRender : function() {
7317 t.onBeforeSetContent.add(function(ed, o) { 7317 var t = this, id = t.id;
7318 if (o.initial) 7318
7319 o.content = o.content.replace(/\r?\n/g, '<br />'); 7319 t.parent();
7320 }); 7320 DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});
7321 } 7321 DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value);
7322 7322 },
7323 if (s.fix_nesting && isIE) { 7323
7324 t.onBeforeSetContent.add(function(ed, o) { 7324 destroy : function() {
7325 o.content = t._fixNesting(o.content); 7325 this.parent();
7326 }); 7326
7327 } 7327 Event.clear(this.id + '_menu');
7328 7328 Event.clear(this.id + '_more');
7329 if (s.preformatted) { 7329 DOM.remove(this.id + '_menu');
7330 t.onPostProcess.add(function(ed, o) { 7330 }
7331 o.content = o.content.replace(/^\s*<pre.*?>/, ''); 7331 });
7332 o.content = o.content.replace(/<\/pre>\s*$/, ''); 7332})(tinymce);
7333 7333tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {
7334 if (o.set) 7334 renderHTML : function() {
7335 o.content = '<pre class="mceItemHidden">' + o.content + '</pre>'; 7335 var t = this, h = '', c, co, dom = tinymce.DOM, s = t.settings, i, pr, nx, cl;
7336 }); 7336
7337 } 7337 cl = t.controls;
7338 7338 for (i=0; i<cl.length; i++) {
7339 if (s.verify_css_classes) { 7339 // Get current control, prev control, next control and if the control is a list box or not
7340 t.serializer.attribValueFilter = function(n, v) { 7340 co = cl[i];
7341 var s, cl; 7341 pr = cl[i - 1];
7342 7342 nx = cl[i + 1];
7343 if (n == 'class') { 7343
7344 // Build regexp for classes 7344 // Add toolbar start
7345 if (!t.classesRE) { 7345 if (i === 0) {
7346 cl = t.dom.getClasses(); 7346 c = 'mceToolbarStart';
7347 7347
7348 if (cl.length > 0) { 7348 if (co.Button)
7349 s = ''; 7349 c += ' mceToolbarStartButton';
7350 7350 else if (co.SplitButton)
7351 each (cl, function(o) { 7351 c += ' mceToolbarStartSplitButton';
7352 s += (s ? '|' : '') + o['class']; 7352 else if (co.ListBox)
7353 }); 7353 c += ' mceToolbarStartListBox';
7354 7354
7355 t.classesRE = new RegExp('(' + s + ')', 'gi'); 7355 h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));
7356 } 7356 }
7357 } 7357
7358 7358 // Add toolbar end before list box and after the previous button
7359 return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : ''; 7359 // This is to fix the o2k7 editor skins
7360 } 7360 if (pr && co.ListBox) {
7361 7361 if (pr.Button || pr.SplitButton)
7362 return v; 7362 h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));
7363 }; 7363 }
7364 } 7364
7365 7365 // Render control HTML
7366 if (s.convert_fonts_to_spans) 7366
7367 t._convertFonts(); 7367 // IE 8 quick fix, needed to propertly generate a hit area for anchors
7368 7368 if (dom.stdMode)
7369 if (s.inline_styles) 7369 h += '<td style="position: relative">' + co.renderHTML() + '</td>';
7370 t._convertInlineElements(); 7370 else
7371 7371 h += '<td>' + co.renderHTML() + '</td>';
7372 if (s.cleanup_callback) { 7372
7373 t.onBeforeSetContent.add(function(ed, o) { 7373 // Add toolbar start after list box and before the next button
7374 o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); 7374 // This is to fix the o2k7 editor skins
7375 }); 7375 if (nx && co.ListBox) {
7376 7376 if (nx.Button || nx.SplitButton)
7377 t.onPreProcess.add(function(ed, o) { 7377 h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));
7378 if (o.set) 7378 }
7379 t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o); 7379 }
7380 7380
7381 if (o.get) 7381 c = 'mceToolbarEnd';
7382 t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o); 7382
7383 }); 7383 if (co.Button)
7384 7384 c += ' mceToolbarEndButton';
7385 t.onPostProcess.add(function(ed, o) { 7385 else if (co.SplitButton)
7386 if (o.set) 7386 c += ' mceToolbarEndSplitButton';
7387 o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o); 7387 else if (co.ListBox)
7388 7388 c += ' mceToolbarEndListBox';
7389 if (o.get) 7389
7390 o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o); 7390 h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));
7391 }); 7391
7392 } 7392 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>');
7393 7393 }
7394 if (s.save_callback) { 7394});
7395 t.onGetContent.add(function(ed, o) { 7395(function(tinymce) {
7396 if (o.save) 7396 var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;
7397 o.content = t.execCallback('save_callback', t.id, o.content, t.getBody()); 7397
7398 }); 7398 tinymce.create('tinymce.AddOnManager', {
7399 } 7399 items : [],
7400 7400 urls : {},
7401 if (s.handle_event_callback) { 7401 lookup : {},
7402 t.onEvent.add(function(ed, e, o) { 7402
7403 if (t.execCallback('handle_event_callback', e, ed, o) === false) 7403 onAdd : new Dispatcher(this),
7404 Event.cancel(e); 7404
7405 }); 7405 get : function(n) {
7406 } 7406 return this.lookup[n];
7407 7407 },
7408 t.onSetContent.add(function() { 7408
7409 // Safari needs some time, it will crash the browser when a link is created otherwise 7409 requireLangPack : function(n) {
7410 // I think this crash issue is resolved in the latest 3.0.4 7410 var u, s = tinymce.EditorManager.settings;
7411 //window.setTimeout(function() { 7411
7412 t.addVisual(t.getBody()); 7412 if (s && s.language) {
7413 //}, 1); 7413 u = this.urls[n] + '/langs/' + s.language + '.js';
7414 }); 7414
7415 7415 if (!tinymce.dom.Event.domLoaded && !s.strict_mode)
7416 // Remove empty contents 7416 tinymce.ScriptLoader.load(u);
7417 if (s.padd_empty_editor) { 7417 else
7418 t.onPostProcess.add(function(ed, o) { 7418 tinymce.ScriptLoader.add(u);
7419 o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, ''); 7419 }
7420 }); 7420 },
7421 } 7421
7422 7422 add : function(id, o) {
7423 if (isGecko && !s.readonly) { 7423 this.items.push(o);
7424 try { 7424 this.lookup[id] = o;
7425 // Design mode must be set here once again to fix a bug where 7425 this.onAdd.dispatch(this, id, o);
7426 // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again 7426
7427 d.designMode = 'Off'; 7427 return o;
7428 d.designMode = 'On'; 7428 },
7429 } catch (ex) { 7429
7430 // Will fail on Gecko if the editor is placed in an hidden container element 7430 load : function(n, u, cb, s) {
7431 // The design mode will be set ones the editor is focused 7431 var t = this;
7432 } 7432
7433 } 7433 if (t.urls[n])
7434 7434 return;
7435 // A small timeout was needed since firefox will remove. Bug: #1838304 7435
7436 setTimeout(function () { 7436 if (u.indexOf('/') != 0 && u.indexOf('://') == -1)
7437 if (t.removed) 7437 u = tinymce.baseURL + '/' + u;
7438 return; 7438
7439 7439 t.urls[n] = u.substring(0, u.lastIndexOf('/'));
7440 t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')}); 7440 tinymce.ScriptLoader.add(u, cb, s);
7441 t.startContent = t.getContent({format : 'raw'}); 7441 }
7442 t.undoManager.add({initial : true}); 7442 });
7443 t.initialized = true; 7443
7444 7444 // Create plugin and theme managers
7445 t.onInit.dispatch(t); 7445 tinymce.PluginManager = new tinymce.AddOnManager();
7446 t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc()); 7446 tinymce.ThemeManager = new tinymce.AddOnManager();
7447 t.execCallback('init_instance_callback', t); 7447}(tinymce));
7448 t.focus(true); 7448
7449 t.nodeChanged({initial : 1}); 7449(function(tinymce) {
7450 7450 // Shorten names
7451 // Load specified content CSS last 7451 var each = tinymce.each, extend = tinymce.extend, DOM = tinymce.DOM, Event = tinymce.dom.Event, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, explode = tinymce.explode;
7452 if (s.content_css) { 7452
7453 tinymce.each(explode(s.content_css), function(u) { 7453 tinymce.create('static tinymce.EditorManager', {
7454 t.dom.loadCSS(t.documentBaseURI.toAbsolute(u)); 7454 editors : {},
7455 }); 7455
7456 } 7456 i18n : {},
7457 7457
7458 // Handle auto focus 7458 activeEditor : null,
7459 if (s.auto_focus) { 7459
7460 setTimeout(function () { 7460 preInit : function() {
7461 var ed = EditorManager.get(s.auto_focus); 7461 var t = this, lo = window.location;
7462 7462
7463 ed.selection.select(ed.getBody(), 1); 7463 // Setup some URLs where the editor API is located and where the document is
7464 ed.selection.collapse(1); 7464 tinymce.documentBaseURL = lo.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');
7465 ed.getWin().focus(); 7465 if (!/[\/\\]$/.test(tinymce.documentBaseURL))
7466 }, 100); 7466 tinymce.documentBaseURL += '/';
7467 } 7467
7468 }, 1); 7468 tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);
7469 7469 tinymce.EditorManager.baseURI = new tinymce.util.URI(tinymce.baseURL);
7470 e = null; 7470
7471 }, 7471 // Add before unload listener
7472 7472 // This was required since IE was leaking memory if you added and removed beforeunload listeners
7473 7473 // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event
7474 focus : function(sf) { 7474 t.onBeforeUnload = new tinymce.util.Dispatcher(t);
7475 var oed, t = this, ce = t.settings.content_editable; 7475
7476 7476 // Must be on window or IE will leak if the editor is placed in frame or iframe
7477 if (!sf) { 7477 Event.add(window, 'beforeunload', function(e) {
7478 // Is not content editable or the selection is outside the area in IE 7478 t.onBeforeUnload.dispatch(t, e);
7479 // the IE statement is needed to avoid bluring if element selections inside layers since 7479 });
7480 // the layer is like it's own document in IE 7480 },
7481 if (!ce && (!isIE || t.selection.getNode().ownerDocument != t.getDoc())) 7481
7482 t.getWin().focus(); 7482 init : function(s) {
7483 7483 var t = this, pl, sl = tinymce.ScriptLoader, c, e, el = [], ed;
7484 } 7484
7485 7485 function execCallback(se, n, s) {
7486 if (EditorManager.activeEditor != t) { 7486 var f = se[n];
7487 if ((oed = EditorManager.activeEditor) != null) 7487
7488 oed.onDeactivate.dispatch(oed, t); 7488 if (!f)
7489 7489 return;
7490 t.onActivate.dispatch(t, oed); 7490
7491 } 7491 if (tinymce.is(f, 'string')) {
7492 7492 s = f.replace(/\.\w+$/, '');
7493 EditorManager._setActive(t); 7493 s = s ? tinymce.resolve(s) : 0;
7494 }, 7494 f = tinymce.resolve(f);
7495 7495 }
7496 execCallback : function(n) { 7496
7497 var t = this, f = t.settings[n], s; 7497 return f.apply(s || this, Array.prototype.slice.call(arguments, 2));
7498 7498 };
7499 if (!f) 7499
7500 return; 7500 s = extend({
7501 7501 theme : "simple",
7502 // Look through lookup 7502 language : "en",
7503 if (t.callbackLookup && (s = t.callbackLookup[n])) { 7503 strict_loading_mode : document.contentType == 'application/xhtml+xml'
7504 f = s.func; 7504 }, s);
7505 s = s.scope; 7505
7506 } 7506 t.settings = s;
7507 7507
7508 if (is(f, 'string')) { 7508 // If page not loaded and strict mode isn't enabled then load them
7509 s = f.replace(/\.\w+$/, ''); 7509 if (!Event.domLoaded && !s.strict_loading_mode) {
7510 s = s ? tinymce.resolve(s) : 0; 7510 // Load language
7511 f = tinymce.resolve(f); 7511 if (s.language)
7512 t.callbackLookup = t.callbackLookup || {}; 7512 sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');
7513 t.callbackLookup[n] = {func : f, scope : s}; 7513
7514 } 7514 // Load theme
7515 7515 if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])
7516 return f.apply(s || t, Array.prototype.slice.call(arguments, 1)); 7516 ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');
7517 }, 7517
7518 7518 // Load plugins
7519 translate : function(s) { 7519 if (s.plugins) {
7520 var c = this.settings.language || 'en', i18n = EditorManager.i18n; 7520 pl = explode(s.plugins);
7521 7521
7522 if (!s) 7522 // Load rest if plugins
7523 return ''; 7523 each(pl, function(v) {
7524 7524 if (v && v.charAt(0) != '-' && !PluginManager.urls[v]) {
7525 return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) { 7525 // Skip safari plugin for other browsers
7526 return i18n[c + '.' + b] || '{#' + b + '}'; 7526 if (!tinymce.isWebKit && v == 'safari')
7527 }); 7527 return;
7528 }, 7528
7529 7529 PluginManager.load(v, 'plugins/' + v + '/editor_plugin' + tinymce.suffix + '.js');
7530 getLang : function(n, dv) { 7530 }
7531 return EditorManager.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}'); 7531 });
7532 }, 7532 }
7533 7533
7534 getParam : function(n, dv, ty) { 7534 sl.loadQueue();
7535 var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o; 7535 }
7536 7536
7537 if (ty === 'hash') { 7537 // Legacy call
7538 o = {}; 7538 Event.add(document, 'init', function() {
7539 7539 var l, co;
7540 if (is(v, 'string')) { 7540
7541 each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) { 7541 execCallback(s, 'onpageload');
7542 v = v.split('='); 7542
7543 7543 // Verify that it's a valid browser
7544 if (v.length > 1) 7544 if (s.browsers) {
7545 o[tr(v[0])] = tr(v[1]); 7545 l = false;
7546 else 7546
7547 o[tr(v[0])] = tr(v); 7547 each(explode(s.browsers), function(v) {
7548 }); 7548 switch (v) {
7549 } else 7549 case 'ie':
7550 o = v; 7550 case 'msie':
7551 7551 if (tinymce.isIE)
7552 return o; 7552 l = true;
7553 } 7553 break;
7554 7554
7555 return v; 7555 case 'gecko':
7556 }, 7556 if (tinymce.isGecko)
7557 7557 l = true;
7558 nodeChanged : function(o) { 7558 break;
7559 var t = this, s = t.selection, n = s.getNode() || t.getBody(); 7559
7560 7560 case 'safari':
7561 // Fix for bug #1896577 it seems that this can not be fired while the editor is loading 7561 case 'webkit':
7562 if (t.initialized) { 7562 if (tinymce.isWebKit)
7563 t.onNodeChange.dispatch( 7563 l = true;
7564 t, 7564 break;
7565 o ? o.controlManager || t.controlManager : t.controlManager, 7565
7566 isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n, // Fix for IE initial state 7566 case 'opera':
7567 s.isCollapsed(), 7567 if (tinymce.isOpera)
7568 o 7568 l = true;
7569 ); 7569
7570 } 7570 break;
7571 }, 7571 }
7572 7572 });
7573 addButton : function(n, s) { 7573
7574 var t = this; 7574 // Not a valid one
7575 7575 if (!l)
7576 t.buttons = t.buttons || {}; 7576 return;
7577 t.buttons[n] = s; 7577 }
7578 }, 7578
7579 7579 switch (s.mode) {
7580 addCommand : function(n, f, s) { 7580 case "exact":
7581 this.execCommands[n] = {func : f, scope : s || this}; 7581 l = s.elements || '';
7582 }, 7582
7583 7583 if(l.length > 0) {
7584 addQueryStateHandler : function(n, f, s) { 7584 each(explode(l), function(v) {
7585 this.queryStateCommands[n] = {func : f, scope : s || this}; 7585 if (DOM.get(v)) {
7586 }, 7586 ed = new tinymce.Editor(v, s);
7587 7587 el.push(ed);
7588 addQueryValueHandler : function(n, f, s) { 7588 ed.render(1);
7589 this.queryValueCommands[n] = {func : f, scope : s || this}; 7589 } else {
7590 }, 7590 c = 0;
7591 7591
7592 addShortcut : function(pa, desc, cmd_func, sc) { 7592 each(document.forms, function(f) {
7593 var t = this, c; 7593 each(f.elements, function(e) {
7594 7594 if (e.name === v) {
7595 if (!t.settings.custom_shortcuts) 7595 v = 'mce_editor_' + c;
7596 return false; 7596 DOM.setAttrib(e, 'id', v);
7597 7597
7598 t.shortcuts = t.shortcuts || {}; 7598 ed = new tinymce.Editor(v, s);
7599 7599 el.push(ed);
7600 if (is(cmd_func, 'string')) { 7600 ed.render(1);
7601 c = cmd_func; 7601 }
7602 7602 });
7603 cmd_func = function() { 7603 });
7604 t.execCommand(c, false, null); 7604 }
7605 }; 7605 });
7606 } 7606 }
7607 7607 break;
7608 if (is(cmd_func, 'object')) { 7608
7609 c = cmd_func; 7609 case "textareas":
7610 7610 case "specific_textareas":
7611 cmd_func = function() { 7611 function hasClass(n, c) {
7612 t.execCommand(c[0], c[1], c[2]); 7612 return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);
7613 }; 7613 };
7614 } 7614
7615 7615 each(DOM.select('textarea'), function(v) {
7616 each(explode(pa), function(pa) { 7616 if (s.editor_deselector && hasClass(v, s.editor_deselector))
7617 var o = { 7617 return;
7618 func : cmd_func, 7618
7619 scope : sc || this, 7619 if (!s.editor_selector || hasClass(v, s.editor_selector)) {
7620 desc : desc, 7620 // Can we use the name
7621 alt : false, 7621 e = DOM.get(v.name);
7622 ctrl : false, 7622 if (!v.id && !e)
7623 shift : false 7623 v.id = v.name;
7624 }; 7624
7625 7625 // Generate unique name if missing or already exists
7626 each(explode(pa, '+'), function(v) { 7626 if (!v.id || t.get(v.id))
7627 switch (v) { 7627 v.id = DOM.uniqueId();
7628 case 'alt': 7628
7629 case 'ctrl': 7629 ed = new tinymce.Editor(v.id, s);
7630 case 'shift': 7630 el.push(ed);
7631 o[v] = true; 7631 ed.render(1);
7632 break; 7632 }
7633 7633 });
7634 default: 7634 break;
7635 o.charCode = v.charCodeAt(0); 7635 }
7636 o.keyCode = v.toUpperCase().charCodeAt(0); 7636
7637 } 7637 // Call onInit when all editors are initialized
7638 }); 7638 if (s.oninit) {
7639 7639 l = co = 0;
7640 t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o; 7640
7641 }); 7641 each (el, function(ed) {
7642 7642 co++;
7643 return true; 7643
7644 }, 7644 if (!ed.initialized) {
7645 7645 // Wait for it
7646 execCommand : function(cmd, ui, val, a) { 7646 ed.onInit.add(function() {
7647 var t = this, s = 0, o, st; 7647 l++;
7648 7648
7649 if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus)) 7649 // All done
7650 t.focus(); 7650 if (l == co)
7651 7651 execCallback(s, 'oninit');
7652 o = {}; 7652 });
7653 t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o); 7653 } else
7654 if (o.terminate) 7654 l++;
7655 return false; 7655
7656 7656 // All done
7657 // Command callback 7657 if (l == co)
7658 if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) { 7658 execCallback(s, 'oninit');
7659 t.onExecCommand.dispatch(t, cmd, ui, val, a); 7659 });
7660 return true; 7660 }
7661 } 7661 });
7662 7662 },
7663 // Registred commands 7663
7664 if (o = t.execCommands[cmd]) { 7664 get : function(id) {
7665 st = o.func.call(o.scope, ui, val); 7665 return this.editors[id];
7666 7666 },
7667 // Fall through on true 7667
7668 if (st !== true) { 7668 getInstanceById : function(id) {
7669 t.onExecCommand.dispatch(t, cmd, ui, val, a); 7669 return this.get(id);
7670 return st; 7670 },
7671 } 7671
7672 } 7672 add : function(e) {
7673 7673 this.editors[e.id] = e;
7674 // Plugin commands 7674 this._setActive(e);
7675 each(t.plugins, function(p) { 7675
7676 if (p.execCommand && p.execCommand(cmd, ui, val)) { 7676 return e;
7677 t.onExecCommand.dispatch(t, cmd, ui, val, a); 7677 },
7678 s = 1; 7678
7679 return false; 7679 remove : function(e) {
7680 } 7680 var t = this;
7681 }); 7681
7682 7682 // Not in the collection
7683 if (s) 7683 if (!t.editors[e.id])
7684 return true; 7684 return null;
7685 7685
7686 // Theme commands 7686 delete t.editors[e.id];
7687 if (t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) { 7687
7688 t.onExecCommand.dispatch(t, cmd, ui, val, a); 7688 // Select another editor since the active one was removed
7689 return true; 7689 if (t.activeEditor == e) {
7690 } 7690 t._setActive(null);
7691 7691
7692 // Editor commands 7692 each(t.editors, function(e) {
7693 if (t.editorCommands.execCommand(cmd, ui, val)) { 7693 t._setActive(e);
7694 t.onExecCommand.dispatch(t, cmd, ui, val, a); 7694 return false; // Break
7695 return true; 7695 });
7696 } 7696 }
7697 7697
7698 // Browser commands 7698 e.destroy();
7699 t.getDoc().execCommand(cmd, ui, val); 7699
7700 t.onExecCommand.dispatch(t, cmd, ui, val, a); 7700 return e;
7701 }, 7701 },
7702 7702
7703 queryCommandState : function(c) { 7703 execCommand : function(c, u, v) {
7704 var t = this, o, s; 7704 var t = this, ed = t.get(v), w;
7705 7705
7706 // Is hidden then return undefined 7706 // Manager commands
7707 if (t._isHidden()) 7707 switch (c) {
7708 return; 7708 case "mceFocus":
7709 7709 ed.focus();
7710 // Registred commands 7710 return true;
7711 if (o = t.queryStateCommands[c]) { 7711
7712 s = o.func.call(o.scope); 7712 case "mceAddEditor":
7713 7713 case "mceAddControl":
7714 // Fall though on true 7714 if (!t.get(v))
7715 if (s !== true) 7715 new tinymce.Editor(v, t.settings).render();
7716 return s; 7716
7717 } 7717 return true;
7718 7718
7719 // Registred commands 7719 case "mceAddFrameControl":
7720 o = t.editorCommands.queryCommandState(c); 7720 w = v.window;
7721 if (o !== -1) 7721
7722 return o; 7722 // Add tinyMCE global instance and tinymce namespace to specified window
7723 7723 w.tinyMCE = tinyMCE;
7724 // Browser commands 7724 w.tinymce = tinymce;
7725 try { 7725
7726 return this.getDoc().queryCommandState(c); 7726 tinymce.DOM.doc = w.document;
7727 } catch (ex) { 7727 tinymce.DOM.win = w;
7728 // Fails sometimes see bug: 1896577 7728
7729 } 7729 ed = new tinymce.Editor(v.element_id, v);
7730 }, 7730 ed.render();
7731 7731
7732 queryCommandValue : function(c) { 7732 // Fix IE memory leaks
7733 var t = this, o, s; 7733 if (tinymce.isIE) {
7734 7734 function clr() {
7735 // Is hidden then return undefined 7735 ed.destroy();
7736 if (t._isHidden()) 7736 w.detachEvent('onunload', clr);
7737 return; 7737 w = w.tinyMCE = w.tinymce = null; // IE leak
7738 7738 };
7739 // Registred commands 7739
7740 if (o = t.queryValueCommands[c]) { 7740 w.attachEvent('onunload', clr);
7741 s = o.func.call(o.scope); 7741 }
7742 7742
7743 // Fall though on true 7743 v.page_window = null;
7744 if (s !== true) 7744
7745 return s; 7745 return true;
7746 } 7746
7747 7747 case "mceRemoveEditor":
7748 // Registred commands 7748 case "mceRemoveControl":
7749 o = t.editorCommands.queryCommandValue(c); 7749 if (ed)
7750 if (is(o)) 7750 ed.remove();
7751 return o; 7751
7752 7752 return true;
7753 // Browser commands 7753
7754 try { 7754 case 'mceToggleEditor':
7755 return this.getDoc().queryCommandValue(c); 7755 if (!ed) {
7756 } catch (ex) { 7756 t.execCommand('mceAddControl', 0, v);
7757 // Fails sometimes see bug: 1896577 7757 return true;
7758 } 7758 }
7759 }, 7759
7760 7760 if (ed.isHidden())
7761 show : function() { 7761 ed.show();
7762 var t = this; 7762 else
7763 7763 ed.hide();
7764 DOM.show(t.getContainer()); 7764
7765 DOM.hide(t.id); 7765 return true;
7766 t.load(); 7766 }
7767 }, 7767
7768 7768 // Run command on active editor
7769 hide : function() { 7769 if (t.activeEditor)
7770 var t = this, d = t.getDoc(); 7770 return t.activeEditor.execCommand(c, u, v);
7771 7771
7772 // Fixed bug where IE has a blinking cursor left from the editor 7772 return false;
7773 if (isIE && d) 7773 },
7774 d.execCommand('SelectAll'); 7774
7775 7775 execInstanceCommand : function(id, c, u, v) {
7776 // We must save before we hide so Safari doesn't crash 7776 var ed = this.get(id);
7777 t.save(); 7777
7778 DOM.hide(t.getContainer()); 7778 if (ed)
7779 DOM.setStyle(t.id, 'display', t.orgDisplay); 7779 return ed.execCommand(c, u, v);
7780 }, 7780
7781 7781 return false;
7782 isHidden : function() { 7782 },
7783 return !DOM.isHidden(this.id); 7783
7784 }, 7784 triggerSave : function() {
7785 7785 each(this.editors, function(e) {
7786 setProgressState : function(b, ti, o) { 7786 e.save();
7787 this.onSetProgressState.dispatch(this, b, ti, o); 7787 });
7788 7788 },
7789 return b; 7789
7790 }, 7790 addI18n : function(p, o) {
7791 7791 var lo, i18n = this.i18n;
7792 resizeToContent : function() { 7792
7793 var t = this; 7793 if (!tinymce.is(p, 'string')) {
7794 7794 each(p, function(o, lc) {
7795 DOM.setStyle(t.id + "_ifr", 'height', t.getBody().scrollHeight); 7795 each(o, function(o, g) {
7796 }, 7796 each(o, function(o, k) {
7797 7797 if (g === 'common')
7798 load : function(o) { 7798 i18n[lc + '.' + k] = o;
7799 var t = this, e = t.getElement(), h; 7799 else
7800 7800 i18n[lc + '.' + g + '.' + k] = o;
7801 if (e) { 7801 });
7802 o = o || {}; 7802 });
7803 o.load = true; 7803 });
7804 7804 } else {
7805 h = t.setContent(is(e.value) ? e.value : e.innerHTML, o); 7805 each(o, function(o, k) {
7806 o.element = e; 7806 i18n[p + '.' + k] = o;
7807 7807 });
7808 if (!o.no_events) 7808 }
7809 t.onLoadContent.dispatch(t, o); 7809 },
7810 7810
7811 o.element = e = null; 7811 // Private methods
7812 7812
7813 return h; 7813 _setActive : function(e) {
7814 } 7814 this.selectedInstance = this.activeEditor = e;
7815 }, 7815 }
7816 7816 });
7817 save : function(o) { 7817
7818 var t = this, e = t.getElement(), h, f; 7818 tinymce.EditorManager.preInit();
7819 7819})(tinymce);
7820 if (!e || !t.initialized) 7820
7821 return; 7821var tinyMCE = window.tinyMCE = tinymce.EditorManager;
7822 7822(function(tinymce) {
7823 o = o || {}; 7823 var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, Dispatcher = tinymce.util.Dispatcher;
7824 o.save = true; 7824 var each = tinymce.each, isGecko = tinymce.isGecko, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit;
7825 7825 var is = tinymce.is, ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager, EditorManager = tinymce.EditorManager;
7826 // Add undo level will trigger onchange event 7826 var inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;
7827 if (!o.no_events) { 7827
7828 t.undoManager.typing = 0; 7828 tinymce.create('tinymce.Editor', {
7829 t.undoManager.add(); 7829 Editor : function(id, s) {
7830 } 7830 var t = this;
7831 7831
7832 o.element = e; 7832 t.id = t.editorId = id;
7833 h = o.content = t.getContent(o); 7833
7834 7834 t.execCommands = {};
7835 if (!o.no_events) 7835 t.queryStateCommands = {};
7836 t.onSaveContent.dispatch(t, o); 7836 t.queryValueCommands = {};
7837 7837
7838 h = o.content; 7838 t.isNotDirty = false;
7839 7839
7840 if (!/TEXTAREA|INPUT/i.test(e.nodeName)) { 7840 t.plugins = {};
7841 e.innerHTML = h; 7841
7842 7842 // Add events to the editor
7843 // Update hidden form element 7843 each([
7844 if (f = DOM.getParent(t.id, 'form')) { 7844 'onPreInit',
7845 each(f.elements, function(e) { 7845
7846 if (e.name == t.id) { 7846 'onBeforeRenderUI',
7847 e.value = h; 7847
7848 return false; 7848 'onPostRender',
7849 } 7849
7850 }); 7850 'onInit',
7851 } 7851
7852 } else 7852 'onRemove',
7853 e.value = h; 7853
7854 7854 'onActivate',
7855 o.element = e = null; 7855
7856 7856 'onDeactivate',
7857 return h; 7857
7858 }, 7858 'onClick',
7859 7859
7860 setContent : function(h, o) { 7860 'onEvent',
7861 var t = this; 7861
7862 7862 'onMouseUp',
7863 o = o || {}; 7863
7864 o.format = o.format || 'html'; 7864 'onMouseDown',
7865 o.set = true; 7865
7866 o.content = h; 7866 'onDblClick',
7867 7867
7868 if (!o.no_events) 7868 'onKeyDown',
7869 t.onBeforeSetContent.dispatch(t, o); 7869
7870 7870 'onKeyUp',
7871 // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content 7871
7872 // It will also be impossible to place the caret in the editor unless there is a BR element present 7872 'onKeyPress',
7873 if (!tinymce.isIE && (h.length === 0 || /^\s+$/.test(h))) { 7873
7874 o.content = t.dom.setHTML(t.getBody(), '<br mce_bogus="1" />'); 7874 'onContextMenu',
7875 o.format = 'raw'; 7875
7876 } 7876 'onSubmit',
7877 7877
7878 o.content = t.dom.setHTML(t.getBody(), tinymce.trim(o.content)); 7878 'onReset',
7879 7879
7880 if (o.format != 'raw' && t.settings.cleanup) { 7880 'onPaste',
7881 o.getInner = true; 7881
7882 o.content = t.dom.setHTML(t.getBody(), t.serializer.serialize(t.getBody(), o)); 7882 'onPreProcess',
7883 } 7883
7884 7884 'onPostProcess',
7885 if (!o.no_events) 7885
7886 t.onSetContent.dispatch(t, o); 7886 'onBeforeSetContent',
7887 7887
7888 return o.content; 7888 'onBeforeGetContent',
7889 }, 7889
7890 7890 'onSetContent',
7891 getContent : function(o) { 7891
7892 var t = this, h; 7892 'onGetContent',
7893 7893
7894 o = o || {}; 7894 'onLoadContent',
7895 o.format = o.format || 'html'; 7895
7896 o.get = true; 7896 'onSaveContent',
7897 7897
7898 if (!o.no_events) 7898 'onNodeChange',
7899 t.onBeforeGetContent.dispatch(t, o); 7899
7900 7900 'onChange',
7901 if (o.format != 'raw' && t.settings.cleanup) { 7901
7902 o.getInner = true; 7902 'onBeforeExecCommand',
7903 h = t.serializer.serialize(t.getBody(), o); 7903
7904 } else 7904 'onExecCommand',
7905 h = t.getBody().innerHTML; 7905
7906 7906 'onUndo',
7907 h = h.replace(/^\s*|\s*$/g, ''); 7907
7908 o.content = h; 7908 'onRedo',
7909 7909
7910 if (!o.no_events) 7910 'onVisualAid',
7911 t.onGetContent.dispatch(t, o); 7911
7912 7912 'onSetProgressState'
7913 return o.content; 7913 ], function(e) {
7914 }, 7914 t[e] = new Dispatcher(t);
7915 7915 });
7916 isDirty : function() { 7916
7917 var t = this; 7917 t.settings = s = extend({
7918 7918 id : id,
7919 return tinymce.trim(t.startContent) != tinymce.trim(t.getContent({format : 'raw', no_events : 1})) && !t.isNotDirty; 7919 language : 'en',
7920 }, 7920 docs_language : 'en',
7921 7921 theme : 'simple',
7922 getContainer : function() { 7922 skin : 'default',
7923 var t = this; 7923 delta_width : 0,
7924 7924 delta_height : 0,
7925 if (!t.container) 7925 popup_css : '',
7926 t.container = DOM.get(t.editorContainer || t.id + '_parent'); 7926 plugins : '',
7927 7927 document_base_url : tinymce.documentBaseURL,
7928 return t.container; 7928 add_form_submit_trigger : 1,
7929 }, 7929 submit_patch : 1,
7930 7930 add_unload_trigger : 1,
7931 getContentAreaContainer : function() { 7931 convert_urls : 1,
7932 return this.contentAreaContainer; 7932 relative_urls : 1,
7933 }, 7933 remove_script_host : 1,
7934 7934 table_inline_editing : 0,
7935 getElement : function() { 7935 object_resizing : 1,
7936 return DOM.get(this.settings.content_element || this.id); 7936 cleanup : 1,
7937 }, 7937 accessibility_focus : 1,
7938 7938 custom_shortcuts : 1,
7939 getWin : function() { 7939 custom_undo_redo_keyboard_shortcuts : 1,
7940 var t = this, e; 7940 custom_undo_redo_restore_selection : 1,
7941 7941 custom_undo_redo : 1,
7942 if (!t.contentWindow) { 7942 doctype : '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
7943 e = DOM.get(t.id + "_ifr"); 7943 visual_table_class : 'mceItemTable',
7944 7944 visual : 1,
7945 if (e) 7945 inline_styles : true,
7946 t.contentWindow = e.contentWindow; 7946 convert_fonts_to_spans : true,
7947 } 7947 font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',
7948 7948 apply_source_formatting : 1,
7949 return t.contentWindow; 7949 directionality : 'ltr',
7950 }, 7950 forced_root_block : 'p',
7951 7951 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[cite],-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],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|tabindex|accesskey],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',
7952 getDoc : function() { 7952 hidden_input : 1,
7953 var t = this, w; 7953 padd_empty_editor : 1,
7954 7954 render_ui : 1,
7955 if (!t.contentDocument) { 7955 init_theme : 1,
7956 w = t.getWin(); 7956 force_p_newlines : 1,
7957 7957 indentation : '30px',
7958 if (w) 7958 keep_styles : 1,
7959 t.contentDocument = w.document; 7959 fix_table_elements : 1,
7960 } 7960 removeformat_selector : 'span,b,strong,em,i,font,u,strike'
7961 7961 }, s);
7962 return t.contentDocument; 7962
7963 }, 7963 t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {
7964 7964 base_uri : tinyMCE.baseURI
7965 getBody : function() { 7965 });
7966 return this.bodyElement || this.getDoc().body; 7966
7967 }, 7967 t.baseURI = EditorManager.baseURI;
7968 7968
7969 convertURL : function(u, n, e) { 7969 // Call setup
7970 var t = this, s = t.settings; 7970 t.execCallback('setup', t);
7971 7971 },
7972 // Use callback instead 7972
7973 if (s.urlconverter_callback) 7973 render : function(nst) {
7974 return t.execCallback('urlconverter_callback', u, e, true, n); 7974 var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;
7975 7975
7976 // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs 7976 // Page is not loaded yet, wait for it
7977 if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0) 7977 if (!Event.domLoaded) {
7978 return u; 7978 Event.add(document, 'init', function() {
7979 7979 t.render();
7980 // Convert to relative 7980 });
7981 if (s.relative_urls) 7981 return;
7982 return t.documentBaseURI.toRelative(u); 7982 }
7983 7983
7984 // Convert to absolute 7984 // Force strict loading mode if render us called by user and not internally
7985 u = t.documentBaseURI.toAbsolute(u, s.remove_script_host); 7985 if (!nst) {
7986 7986 s.strict_loading_mode = 1;
7987 return u; 7987 tinyMCE.settings = s;
7988 }, 7988 }
7989 7989
7990 addVisual : function(e) { 7990 // Element not found, then skip initialization
7991 var t = this, s = t.settings; 7991 if (!t.getElement())
7992 7992 return;
7993 e = e || t.getBody(); 7993
7994 7994 if (s.strict_loading_mode) {
7995 if (!is(t.hasVisual)) 7995 sl.settings.strict_mode = s.strict_loading_mode;
7996 t.hasVisual = s.visual; 7996 tinymce.DOM.settings.strict = 1;
7997 7997 }
7998 each(t.dom.select('table,a', e), function(e) { 7998
7999 var v; 7999 // Add hidden input for non input elements inside form elements
8000 8000 if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))
8001 switch (e.nodeName) { 8001 DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);
8002 case 'TABLE': 8002
8003 v = t.dom.getAttrib(e, 'border'); 8003 if (tinymce.WindowManager)
8004 8004 t.windowManager = new tinymce.WindowManager(t);
8005 if (!v || v == '0') { 8005
8006 if (t.hasVisual) 8006 if (s.encoding == 'xml') {
8007 t.dom.addClass(e, s.visual_table_class); 8007 t.onGetContent.add(function(ed, o) {
8008 else 8008 if (o.save)
8009 t.dom.removeClass(e, s.visual_table_class); 8009 o.content = DOM.encode(o.content);
8010 } 8010 });
8011 8011 }
8012 return; 8012
8013 8013 if (s.add_form_submit_trigger) {
8014 case 'A': 8014 t.onSubmit.addToTop(function() {
8015 v = t.dom.getAttrib(e, 'name'); 8015 if (t.initialized) {
8016 8016 t.save();
8017 if (v) { 8017 t.isNotDirty = 1;
8018 if (t.hasVisual) 8018 }
8019 t.dom.addClass(e, 'mceItemAnchor'); 8019 });
8020 else 8020 }
8021 t.dom.removeClass(e, 'mceItemAnchor'); 8021
8022 } 8022 if (s.add_unload_trigger) {
8023 8023 t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {
8024 return; 8024 if (t.initialized && !t.destroyed && !t.isHidden())
8025 } 8025 t.save({format : 'raw', no_events : true});
8026 }); 8026 });
8027 8027 }
8028 t.onVisualAid.dispatch(t, e, t.hasVisual); 8028
8029 }, 8029 tinymce.addUnload(t.destroy, t);
8030 8030
8031 remove : function() { 8031 if (s.submit_patch) {
8032 var t = this, e = t.getContainer(); 8032 t.onBeforeRenderUI.add(function() {
8033 8033 var n = t.getElement().form;
8034 t.removed = 1; // Cancels post remove event execution 8034
8035 t.hide(); 8035 if (!n)
8036 8036 return;
8037 t.execCallback('remove_instance_callback', t); 8037
8038 t.onRemove.dispatch(t); 8038 // Already patched
8039 8039 if (n._mceOldSubmit)
8040 // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command 8040 return;
8041 t.onExecCommand.listeners = []; 8041
8042 8042 // Check page uses id="submit" or name="submit" for it's submit button
8043 EditorManager.remove(t); 8043 if (!n.submit.nodeType && !n.submit.length) {
8044 DOM.remove(e); 8044 t.formElement = n;
8045 }, 8045 n._mceOldSubmit = n.submit;
8046 8046 n.submit = function() {
8047 destroy : function(s) { 8047 // Save all instances
8048 var t = this; 8048 EditorManager.triggerSave();
8049 8049 t.isNotDirty = 1;
8050 // One time is enough 8050
8051 if (t.destroyed) 8051 return t.formElement._mceOldSubmit(t.formElement);
8052 return; 8052 };
8053 8053 }
8054 if (!s) { 8054
8055 tinymce.removeUnload(t.destroy); 8055 n = null;
8056 tinyMCE.onBeforeUnload.remove(t._beforeUnload); 8056 });
8057 8057 }
8058 // Manual destroy 8058
8059 if (t.theme.destroy) 8059 // Load scripts
8060 t.theme.destroy(); 8060 function loadScripts() {
8061 8061 if (s.language)
8062 // Destroy controls, selection and dom 8062 sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');
8063 t.controlManager.destroy(); 8063
8064 t.selection.destroy(); 8064 if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])
8065 t.dom.destroy(); 8065 ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');
8066 8066
8067 // Remove all events 8067 each(explode(s.plugins), function(p) {
8068 8068 if (p && p.charAt(0) != '-' && !PluginManager.urls[p]) {
8069 // Don't clear the window or document if content editable 8069 // Skip safari plugin for other browsers
8070 // is enabled since other instances might still be present 8070 if (!isWebKit && p == 'safari')
8071 if (!t.settings.content_editable) { 8071 return;
8072 Event.clear(t.getWin()); 8072
8073 Event.clear(t.getDoc()); 8073 PluginManager.load(p, 'plugins/' + p + '/editor_plugin' + tinymce.suffix + '.js');
8074 } 8074 }
8075 8075 });
8076 Event.clear(t.getBody()); 8076
8077 Event.clear(t.formElement); 8077 // Init when que is loaded
8078 } 8078 sl.loadQueue(function() {
8079 8079 if (!t.removed)
8080 if (t.formElement) { 8080 t.init();
8081 t.formElement.submit = t.formElement._mceOldSubmit; 8081 });
8082 t.formElement._mceOldSubmit = null; 8082 };
8083 } 8083
8084 8084 loadScripts();
8085 t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null; 8085 },
8086 8086
8087 if (t.selection) 8087 init : function() {
8088 t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null; 8088 var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re;
8089 8089
8090 t.destroyed = 1; 8090 EditorManager.add(t);
8091 }, 8091
8092 8092 if (s.theme) {
8093 // Internal functions 8093 s.theme = s.theme.replace(/-/, '');
8094 8094 o = ThemeManager.get(s.theme);
8095 _addEvents : function() { 8095 t.theme = new o();
8096 // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset 8096
8097 var t = this, i, s = t.settings, lo = { 8097 if (t.theme.init && s.init_theme)
8098 mouseup : 'onMouseUp', 8098 t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));
8099 mousedown : 'onMouseDown', 8099 }
8100 click : 'onClick', 8100
8101 keyup : 'onKeyUp', 8101 // Create all plugins
8102 keydown : 'onKeyDown', 8102 each(explode(s.plugins.replace(/\-/g, '')), function(p) {
8103 keypress : 'onKeyPress', 8103 var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;
8104 submit : 'onSubmit', 8104
8105 reset : 'onReset', 8105 if (c) {
8106 contextmenu : 'onContextMenu', 8106 po = new c(t, u);
8107 dblclick : 'onDblClick', 8107
8108 paste : 'onPaste' // Doesn't work in all browsers yet 8108 t.plugins[p] = po;
8109 }; 8109
8110 8110 if (po.init)
8111 function eventHandler(e, o) { 8111 po.init(t, u);
8112 var ty = e.type; 8112 }
8113 8113 });
8114 // Don't fire events when it's removed 8114
8115 if (t.removed) 8115 // Setup popup CSS path(s)
8116 return; 8116 if (s.popup_css !== false) {
8117 8117 if (s.popup_css)
8118 // Generic event handler 8118 s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);
8119 if (t.onEvent.dispatch(t, e, o) !== false) { 8119 else
8120 // Specific event handler 8120 s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");
8121 t[lo[e.fakeType || e.type]].dispatch(t, e, o); 8121 }
8122 } 8122
8123 }; 8123 if (s.popup_css_add)
8124 8124 s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);
8125 // Add DOM events 8125
8126 each(lo, function(v, k) { 8126 t.controlManager = new tinymce.ControlManager(t);
8127 switch (k) { 8127
8128 case 'contextmenu': 8128 t.undoManager = new tinymce.UndoManager(t);
8129 if (tinymce.isOpera) { 8129
8130 // Fake contextmenu on Opera 8130 // Pass through
8131 Event.add(t.getBody(), 'mousedown', function(e) { 8131 t.undoManager.onAdd.add(function(um, l) {
8132 if (e.ctrlKey) { 8132 if (!l.initial)
8133 e.fakeType = 'contextmenu'; 8133 return t.onChange.dispatch(t, l, um);
8134 eventHandler(e); 8134 });
8135 } 8135
8136 }); 8136 t.undoManager.onUndo.add(function(um, l) {
8137 } else 8137 return t.onUndo.dispatch(t, l, um);
8138 Event.add(t.getBody(), k, eventHandler); 8138 });
8139 break; 8139
8140 8140 t.undoManager.onRedo.add(function(um, l) {
8141 case 'paste': 8141 return t.onRedo.dispatch(t, l, um);
8142 Event.add(t.getBody(), k, function(e) { 8142 });
8143 var tx, h, el, r; 8143
8144 8144 if (s.custom_undo_redo) {
8145 // Get plain text data 8145 t.onExecCommand.add(function(ed, cmd, ui, val, a) {
8146 if (e.clipboardData) 8146 if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))
8147 tx = e.clipboardData.getData('text/plain'); 8147 t.undoManager.add();
8148 else if (tinymce.isIE) 8148 });
8149 tx = t.getWin().clipboardData.getData('Text'); 8149 }
8150 8150
8151 // Get HTML data 8151 t.onExecCommand.add(function(ed, c) {
8152 /*if (tinymce.isIE) { 8152 // Don't refresh the select lists until caret move
8153 el = DOM.add(DOM.doc.body, 'div', {style : 'visibility:hidden;overflow:hidden;position:absolute;width:1px;height:1px'}); 8153 if (!/^(FontName|FontSize)$/.test(c))
8154 r = DOM.doc.body.createTextRange(); 8154 t.nodeChanged();
8155 r.moveToElementText(el); 8155 });
8156 r.execCommand('Paste'); 8156
8157 h = el.innerHTML; 8157 // Remove ghost selections on images and tables in Gecko
8158 DOM.remove(el); 8158 if (isGecko) {
8159 }*/ 8159 function repaint(a, o) {
8160 8160 if (!o || !o.initial)
8161 eventHandler(e, {text : tx, html : h}); 8161 t.execCommand('mceRepaint');
8162 }); 8162 };
8163 break; 8163
8164 8164 t.onUndo.add(repaint);
8165 case 'submit': 8165 t.onRedo.add(repaint);
8166 case 'reset': 8166 t.onSetContent.add(repaint);
8167 Event.add(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler); 8167 }
8168 break; 8168
8169 8169 // Enables users to override the control factory
8170 default: 8170 t.onBeforeRenderUI.dispatch(t, t.controlManager);
8171 Event.add(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler); 8171
8172 } 8172 // Measure box
8173 }); 8173 if (s.render_ui) {
8174 8174 w = s.width || e.style.width || e.offsetWidth;
8175 Event.add(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) { 8175 h = s.height || e.style.height || e.offsetHeight;
8176 t.focus(true); 8176 t.orgDisplay = e.style.display;
8177 }); 8177 re = /^[0-9\.]+(|px)$/i;
8178 8178
8179 8179 if (re.test('' + w))
8180 // Fixes bug where a specified document_base_uri could result in broken images 8180 w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);
8181 // This will also fix drag drop of images in Gecko 8181
8182 if (tinymce.isGecko) { 8182 if (re.test('' + h))
8183 // Convert all images to absolute URLs 8183 h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);
8184/* t.onSetContent.add(function(ed, o) { 8184
8185 each(ed.dom.select('img'), function(e) { 8185 // Render UI
8186 var v; 8186 o = t.theme.renderUI({
8187 8187 targetNode : e,
8188 if (v = e.getAttribute('mce_src')) 8188 width : w,
8189 e.src = t.documentBaseURI.toAbsolute(v); 8189 height : h,
8190 }) 8190 deltaWidth : s.delta_width,
8191 });*/ 8191 deltaHeight : s.delta_height
8192 8192 });
8193 Event.add(t.getDoc(), 'DOMNodeInserted', function(e) { 8193
8194 var v; 8194 t.editorContainer = o.editorContainer;
8195 8195 }
8196 e = e.target; 8196
8197 8197
8198 if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('mce_src'))) 8198 // User specified a document.domain value
8199 e.src = t.documentBaseURI.toAbsolute(v); 8199 if (document.domain && location.hostname != document.domain)
8200 }); 8200 tinymce.relaxedDomain = document.domain;
8201 } 8201
8202 8202 // Resize editor
8203 // Set various midas options in Gecko 8203 DOM.setStyles(o.sizeContainer || o.editorContainer, {
8204 if (isGecko) { 8204 width : w,
8205 function setOpts() { 8205 height : h
8206 var t = this, d = t.getDoc(), s = t.settings; 8206 });
8207 8207
8208 if (isGecko && !s.readonly) { 8208 h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');
8209 if (t._isHidden()) { 8209 if (h < 100)
8210 try { 8210 h = 100;
8211 if (!s.content_editable) 8211
8212 d.designMode = 'On'; 8212 t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';
8213 } catch (ex) { 8213
8214 // Fails if it's hidden 8214 // We only need to override paths if we have to
8215 } 8215 // IE has a bug where it remove site absolute urls to relative ones if this is specified
8216 } 8216 if (s.document_base_url != tinymce.documentBaseURL)
8217 8217 t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';
8218 try { 8218
8219 // Try new Gecko method 8219 t.iframeHTML += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';
8220 d.execCommand("styleWithCSS", 0, false); 8220
8221 } catch (ex) { 8221 if (tinymce.relaxedDomain)
8222 // Use old method 8222 t.iframeHTML += '<script type="text/javascript">document.domain = "' + tinymce.relaxedDomain + '";</script>';
8223 if (!t._isHidden()) 8223
8224 try {d.execCommand("useCSS", 0, true);} catch (ex) {} 8224 bi = s.body_id || 'tinymce';
8225 } 8225 if (bi.indexOf('=') != -1) {
8226 8226 bi = t.getParam('body_id', '', 'hash');
8227 if (!s.table_inline_editing) 8227 bi = bi[t.id] || bi;
8228 try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {} 8228 }
8229 8229
8230 if (!s.object_resizing) 8230 bc = s.body_class || '';
8231 try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {} 8231 if (bc.indexOf('=') != -1) {
8232 } 8232 bc = t.getParam('body_class', '', 'hash');
8233 }; 8233 bc = bc[t.id] || '';
8234 8234 }
8235 t.onBeforeExecCommand.add(setOpts); 8235
8236 t.onMouseDown.add(setOpts); 8236 t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '"></body></html>';
8237 } 8237
8238 8238 // Domain relaxing enabled, then set document domain
8239 // Add node change handlers 8239 if (tinymce.relaxedDomain) {
8240 t.onMouseUp.add(t.nodeChanged); 8240 // We need to write the contents here in IE since multiple writes messes up refresh button and back button
8241 t.onClick.add(t.nodeChanged); 8241 if (isIE || (tinymce.isOpera && parseFloat(opera.version()) >= 9.5))
8242 t.onKeyUp.add(function(ed, e) { 8242 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();})()';
8243 var c = e.keyCode; 8243 else if (tinymce.isOpera)
8244 8244 u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();ed.setupIframe();})()';
8245 if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey) 8245 }
8246 t.nodeChanged(); 8246
8247 }); 8247 // Create iframe
8248 8248 n = DOM.add(o.iframeContainer, 'iframe', {
8249 // Add reset handler 8249 id : t.id + "_ifr",
8250 t.onReset.add(function() { 8250 src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7
8251 t.setContent(t.startContent, {format : 'raw'}); 8251 frameBorder : '0',
8252 }); 8252 style : {
8253 8253 width : '100%',
8254 if (t.getParam('tab_focus')) { 8254 height : h
8255 function tabCancel(ed, e) { 8255 }
8256 if (e.keyCode === 9) 8256 });
8257 return Event.cancel(e); 8257
8258 }; 8258 t.contentAreaContainer = o.iframeContainer;
8259 8259 DOM.get(o.editorContainer).style.display = t.orgDisplay;
8260 function tabHandler(ed, e) { 8260 DOM.get(t.id).style.display = 'none';
8261 var x, i, f, el, v; 8261
8262 8262 if (!isIE || !tinymce.relaxedDomain)
8263 function find(d) { 8263 t.setupIframe();
8264 f = DOM.getParent(ed.id, 'form'); 8264
8265 el = f.elements; 8265 e = n = o = null; // Cleanup
8266 8266 },
8267 if (f) { 8267
8268 each(el, function(e, i) { 8268 setupIframe : function() {
8269 if (e.id == ed.id) { 8269 var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;
8270 x = i; 8270
8271 return false; 8271 // Setup iframe body
8272 } 8272 if (!isIE || !tinymce.relaxedDomain) {
8273 }); 8273 d.open();
8274 8274 d.write(t.iframeHTML);
8275 if (d > 0) { 8275 d.close();
8276 for (i = x + 1; i < el.length; i++) { 8276 }
8277 if (el[i].type != 'hidden') 8277
8278 return el[i]; 8278 // Design mode needs to be added here Ctrl+A will fail otherwise
8279 } 8279 if (!isIE) {
8280 } else { 8280 try {
8281 for (i = x - 1; i >= 0; i--) { 8281 if (!s.readonly)
8282 if (el[i].type != 'hidden') 8282 d.designMode = 'On';
8283 return el[i]; 8283 } catch (ex) {
8284 } 8284 // Will fail on Gecko if the editor is placed in an hidden container element
8285 } 8285 // The design mode will be set ones the editor is focused
8286 } 8286 }
8287 8287 }
8288 return null; 8288
8289 }; 8289 // IE needs to use contentEditable or it will display non secure items for HTTPS
8290 8290 if (isIE) {
8291 if (e.keyCode === 9) { 8291 // It will not steal focus if we hide it while setting contentEditable
8292 v = explode(ed.getParam('tab_focus')); 8292 b = t.getBody();
8293 8293 DOM.hide(b);
8294 if (v.length == 1) { 8294
8295 v[1] = v[0]; 8295 if (!s.readonly)
8296 v[0] = ':prev'; 8296 b.contentEditable = true;
8297 } 8297
8298 8298 DOM.show(b);
8299 // Find element to focus 8299 }
8300 if (e.shiftKey) { 8300
8301 if (v[0] == ':prev') 8301 t.dom = new tinymce.DOM.DOMUtils(t.getDoc(), {
8302 el = find(-1); 8302 keep_values : true,
8303 else 8303 url_converter : t.convertURL,
8304 el = DOM.get(v[0]); 8304 url_converter_scope : t,
8305 } else { 8305 hex_colors : s.force_hex_style_colors,
8306 if (v[1] == ':next') 8306 class_filter : s.class_filter,
8307 el = find(1); 8307 update_styles : 1,
8308 else 8308 fix_ie_paragraphs : 1
8309 el = DOM.get(v[1]); 8309 });
8310 } 8310
8311 8311 t.serializer = new tinymce.dom.Serializer(extend(s, {
8312 if (el) { 8312 valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements,
8313 if (ed = EditorManager.get(el.id || el.name)) 8313 dom : t.dom
8314 ed.focus(); 8314 }));
8315 else 8315
8316 window.setTimeout(function() {window.focus();el.focus();}, 10); 8316 t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);
8317 8317
8318 return Event.cancel(e); 8318 t.forceBlocks = new tinymce.ForceBlocks(t, {
8319 } 8319 forced_root_block : s.forced_root_block
8320 } 8320 });
8321 }; 8321 t.editorCommands = new tinymce.EditorCommands(t);
8322 8322
8323 t.onKeyUp.add(tabCancel); 8323 // Pass through
8324 8324 t.serializer.onPreProcess.add(function(se, o) {
8325 if (isGecko) { 8325 return t.onPreProcess.dispatch(t, o, se);
8326 t.onKeyPress.add(tabHandler); 8326 });
8327 t.onKeyDown.add(tabCancel); 8327
8328 } else 8328 t.serializer.onPostProcess.add(function(se, o) {
8329 t.onKeyDown.add(tabHandler); 8329 return t.onPostProcess.dispatch(t, o, se);
8330 } 8330 });
8331 8331
8332 // Add shortcuts 8332 t.onPreInit.dispatch(t);
8333 if (s.custom_shortcuts) { 8333
8334 if (s.custom_undo_redo_keyboard_shortcuts) { 8334 if (!s.gecko_spellcheck)
8335 t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo'); 8335 t.getBody().spellcheck = 0;
8336 t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo'); 8336
8337 } 8337 if (!s.readonly)
8338 8338 t._addEvents();
8339 // Add default shortcuts for gecko 8339
8340 if (isGecko) { 8340 t.controlManager.onPostRender.dispatch(t, t.controlManager);
8341 t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold'); 8341 t.onPostRender.dispatch(t);
8342 t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic'); 8342
8343 t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline'); 8343 if (s.directionality)
8344 } 8344 t.getBody().dir = s.directionality;
8345 8345
8346 // BlockFormat shortcuts keys 8346 if (s.nowrap)
8347 for (i=1; i<=6; i++) 8347 t.getBody().style.whiteSpace = "nowrap";
8348 t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, '<h' + i + '>']); 8348
8349 8349 if (s.custom_elements) {
8350 t.addShortcut('ctrl+7', '', ['FormatBlock', false, '<p>']); 8350 function handleCustom(ed, o) {
8351 t.addShortcut('ctrl+8', '', ['FormatBlock', false, '<div>']); 8351 each(explode(s.custom_elements), function(v) {
8352 t.addShortcut('ctrl+9', '', ['FormatBlock', false, '<address>']); 8352 var n;
8353 8353
8354 function find(e) { 8354 if (v.indexOf('~') === 0) {
8355 var v = null; 8355 v = v.substring(1);
8356 8356 n = 'span';
8357 if (!e.altKey && !e.ctrlKey && !e.metaKey) 8357 } else
8358 return v; 8358 n = 'div';
8359 8359
8360 each(t.shortcuts, function(o) { 8360 o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' mce_name="$1"$2>');
8361 if (tinymce.isMac && o.ctrl != e.metaKey) 8361 o.content = o.content.replace(new RegExp('</(' + v + ')>', 'g'), '</' + n + '>');
8362 return; 8362 });
8363 else if (!tinymce.isMac && o.ctrl != e.ctrlKey) 8363 };
8364 return; 8364
8365 8365 t.onBeforeSetContent.add(handleCustom);
8366 if (o.alt != e.altKey) 8366 t.onPostProcess.add(function(ed, o) {
8367 return; 8367 if (o.set)
8368 8368 handleCustom(ed, o);
8369 if (o.shift != e.shiftKey) 8369 });
8370 return; 8370 }
8371 8371
8372 if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) { 8372 if (s.handle_node_change_callback) {
8373 v = o; 8373 t.onNodeChange.add(function(ed, cm, n) {
8374 return false; 8374 t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());
8375 } 8375 });
8376 }); 8376 }
8377 8377
8378 return v; 8378 if (s.save_callback) {
8379 }; 8379 t.onSaveContent.add(function(ed, o) {
8380 8380 var h = t.execCallback('save_callback', t.id, o.content, t.getBody());
8381 t.onKeyUp.add(function(ed, e) { 8381
8382 var o = find(e); 8382 if (h)
8383 8383 o.content = h;
8384 if (o) 8384 });
8385 return Event.cancel(e); 8385 }
8386 }); 8386
8387 8387 if (s.onchange_callback) {
8388 t.onKeyPress.add(function(ed, e) { 8388 t.onChange.add(function(ed, l) {
8389 var o = find(e); 8389 t.execCallback('onchange_callback', t, l);
8390 8390 });
8391 if (o) 8391 }
8392 return Event.cancel(e); 8392
8393 }); 8393 if (s.convert_newlines_to_brs) {
8394 8394 t.onBeforeSetContent.add(function(ed, o) {
8395 t.onKeyDown.add(function(ed, e) { 8395 if (o.initial)
8396 var o = find(e); 8396 o.content = o.content.replace(/\r?\n/g, '<br />');
8397 8397 });
8398 if (o) { 8398 }
8399 o.func.call(o.scope); 8399
8400 return Event.cancel(e); 8400 if (s.fix_nesting && isIE) {
8401 } 8401 t.onBeforeSetContent.add(function(ed, o) {
8402 }); 8402 o.content = t._fixNesting(o.content);
8403 } 8403 });
8404 8404 }
8405 if (tinymce.isIE) { 8405
8406 // Fix so resize will only update the width and height attributes not the styles of an image 8406 if (s.preformatted) {
8407 // It will also block mceItemNoResize items 8407 t.onPostProcess.add(function(ed, o) {
8408 Event.add(t.getDoc(), 'controlselect', function(e) { 8408 o.content = o.content.replace(/^\s*<pre.*?>/, '');
8409 var re = t.resizeInfo, cb; 8409 o.content = o.content.replace(/<\/pre>\s*$/, '');
8410 8410
8411 e = e.target; 8411 if (o.set)
8412 8412 o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';
8413 // Don't do this action for non image elements 8413 });
8414 if (e.nodeName !== 'IMG') 8414 }
8415 return; 8415
8416 8416 if (s.verify_css_classes) {
8417 if (re) 8417 t.serializer.attribValueFilter = function(n, v) {
8418 Event.remove(re.node, re.ev, re.cb); 8418 var s, cl;
8419 8419
8420 if (!t.dom.hasClass(e, 'mceItemNoResize')) { 8420 if (n == 'class') {
8421 ev = 'resizeend'; 8421 // Build regexp for classes
8422 cb = Event.add(e, ev, function(e) { 8422 if (!t.classesRE) {
8423 var v; 8423 cl = t.dom.getClasses();
8424 8424
8425 e = e.target; 8425 if (cl.length > 0) {
8426 8426 s = '';
8427 if (v = t.dom.getStyle(e, 'width')) { 8427
8428 t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, '')); 8428 each (cl, function(o) {
8429 t.dom.setStyle(e, 'width', ''); 8429 s += (s ? '|' : '') + o['class'];
8430 } 8430 });
8431 8431
8432 if (v = t.dom.getStyle(e, 'height')) { 8432 t.classesRE = new RegExp('(' + s + ')', 'gi');
8433 t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, '')); 8433 }
8434 t.dom.setStyle(e, 'height', ''); 8434 }
8435 } 8435
8436 }); 8436 return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';
8437 } else { 8437 }
8438 ev = 'resizestart'; 8438
8439 cb = Event.add(e, 'resizestart', Event.cancel, Event); 8439 return v;
8440 } 8440 };
8441 8441 }
8442 re = t.resizeInfo = { 8442
8443 node : e, 8443 if (s.convert_fonts_to_spans)
8444 ev : ev, 8444 t._convertFonts();
8445 cb : cb 8445
8446 }; 8446 if (s.inline_styles)
8447 }); 8447 t._convertInlineElements();
8448 8448
8449 t.onKeyDown.add(function(ed, e) { 8449 if (s.cleanup_callback) {
8450 switch (e.keyCode) { 8450 t.onBeforeSetContent.add(function(ed, o) {
8451 case 8: 8451 o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
8452 // Fix IE control + backspace browser bug 8452 });
8453 if (t.selection.getRng().item) { 8453
8454 t.selection.getRng().item(0).removeNode(); 8454 t.onPreProcess.add(function(ed, o) {
8455 return Event.cancel(e); 8455 if (o.set)
8456 } 8456 t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);
8457 } 8457
8458 }); 8458 if (o.get)
8459 } 8459 t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);
8460 8460 });
8461 if (tinymce.isOpera) { 8461
8462 t.onClick.add(function(ed, e) { 8462 t.onPostProcess.add(function(ed, o) {
8463 Event.prevent(e); 8463 if (o.set)
8464 }); 8464 o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);
8465 } 8465
8466 8466 if (o.get)
8467 // Add custom undo/redo handlers 8467 o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);
8468 if (s.custom_undo_redo) { 8468 });
8469 function addUndo() { 8469 }
8470 t.undoManager.typing = 0; 8470
8471 t.undoManager.add(); 8471 if (s.save_callback) {
8472 }; 8472 t.onGetContent.add(function(ed, o) {
8473 8473 if (o.save)
8474 // Add undo level on editor blur 8474 o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());
8475 if (tinymce.isIE) { 8475 });
8476 Event.add(t.getWin(), 'blur', function(e) { 8476 }
8477 var n; 8477
8478 8478 if (s.handle_event_callback) {
8479 // Check added for fullscreen bug 8479 t.onEvent.add(function(ed, e, o) {
8480 if (t.selection) { 8480 if (t.execCallback('handle_event_callback', e, ed, o) === false)
8481 n = t.selection.getNode(); 8481 Event.cancel(e);
8482 8482 });
8483 // Add undo level is selection was lost to another document 8483 }
8484 if (!t.removed && n.ownerDocument && n.ownerDocument != t.getDoc()) 8484
8485 addUndo(); 8485 // Add visual aids when new contents is added
8486 } 8486 t.onSetContent.add(function() {
8487 }); 8487 t.addVisual(t.getBody());
8488 } else { 8488 });
8489 Event.add(t.getDoc(), 'blur', function() { 8489
8490 if (t.selection && !t.removed) 8490 // Remove empty contents
8491 addUndo(); 8491 if (s.padd_empty_editor) {
8492 }); 8492 t.onPostProcess.add(function(ed, o) {
8493 } 8493 o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');
8494 8494 });
8495 t.onMouseDown.add(addUndo); 8495 }
8496 8496
8497 t.onKeyUp.add(function(ed, e) { 8497 if (isGecko) {
8498 if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey) { 8498 // Fix gecko link bug, when a link is placed at the end of block elements there is
8499 t.undoManager.typing = 0; 8499 // no way to move the caret behind the link. This fix adds a bogus br element after the link
8500 t.undoManager.add(); 8500 function fixLinks(ed, o) {
8501 } 8501 each(ed.dom.select('a'), function(n) {
8502 }); 8502 var pn = n.parentNode;
8503 8503
8504 t.onKeyDown.add(function(ed, e) { 8504 if (ed.dom.isBlock(pn) && pn.lastChild === n)
8505 // Is caracter positon keys 8505 ed.dom.add(pn, 'br', {'mce_bogus' : 1});
8506 if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) { 8506 });
8507 if (t.undoManager.typing) { 8507 };
8508 t.undoManager.add(); 8508
8509 t.undoManager.typing = 0; 8509 t.onExecCommand.add(function(ed, cmd) {
8510 } 8510 if (cmd === 'CreateLink')
8511 8511 fixLinks(ed);
8512 return; 8512 });
8513 } 8513
8514 8514 t.onSetContent.add(t.selection.onSetContent.add(fixLinks));
8515 if (!t.undoManager.typing) { 8515
8516 t.undoManager.add(); 8516 if (!s.readonly) {
8517 t.undoManager.typing = 1; 8517 try {
8518 } 8518 // Design mode must be set here once again to fix a bug where
8519 }); 8519 // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again
8520 } 8520 d.designMode = 'Off';
8521 }, 8521 d.designMode = 'On';
8522 8522 } catch (ex) {
8523 _convertInlineElements : function() { 8523 // Will fail on Gecko if the editor is placed in an hidden container element
8524 var t = this, s = t.settings, dom = t.dom, v, e, na, st, sp; 8524 // The design mode will be set ones the editor is focused
8525 8525 }
8526 function convert(ed, o) { 8526 }
8527 if (!s.inline_styles) 8527 }
8528 return; 8528
8529 8529 // A small timeout was needed since firefox will remove. Bug: #1838304
8530 if (o.get) { 8530 setTimeout(function () {
8531 each(t.dom.select('table,u,strike', o.node), function(n) { 8531 if (t.removed)
8532 switch (n.nodeName) { 8532 return;
8533 case 'TABLE': 8533
8534 if (v = dom.getAttrib(n, 'height')) { 8534 t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')});
8535 dom.setStyle(n, 'height', v); 8535 t.startContent = t.getContent({format : 'raw'});
8536 dom.setAttrib(n, 'height', ''); 8536 t.undoManager.add({initial : true});
8537 } 8537 t.initialized = true;
8538 break; 8538
8539 8539 t.onInit.dispatch(t);
8540 case 'U': 8540 t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());
8541 case 'STRIKE': 8541 t.execCallback('init_instance_callback', t);
8542 //sp = dom.create('span', {style : dom.getAttrib(n, 'style')}); 8542 t.focus(true);
8543 n.style.textDecoration = n.nodeName == 'U' ? 'underline' : 'line-through'; 8543 t.nodeChanged({initial : 1});
8544 dom.setAttrib(n, 'mce_style', ''); 8544
8545 dom.setAttrib(n, 'mce_name', 'span'); 8545 // Load specified content CSS last
8546 break; 8546 if (s.content_css) {
8547 } 8547 tinymce.each(explode(s.content_css), function(u) {
8548 }); 8548 t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));
8549 } else if (o.set) { 8549 });
8550 each(t.dom.select('table,span', o.node).reverse(), function(n) { 8550 }
8551 if (n.nodeName == 'TABLE') { 8551
8552 if (v = dom.getStyle(n, 'height')) 8552 // Handle auto focus
8553 dom.setAttrib(n, 'height', v.replace(/[^0-9%]+/g, '')); 8553 if (s.auto_focus) {
8554 } else { 8554 setTimeout(function () {
8555 // Convert spans to elements 8555 var ed = EditorManager.get(s.auto_focus);
8556 if (n.style.textDecoration == 'underline') 8556
8557 na = 'u'; 8557 ed.selection.select(ed.getBody(), 1);
8558 else if (n.style.textDecoration == 'line-through') 8558 ed.selection.collapse(1);
8559 na = 'strike'; 8559 ed.getWin().focus();
8560 else 8560 }, 100);
8561 na = ''; 8561 }
8562 8562 }, 1);
8563 if (na) { 8563
8564 n.style.textDecoration = ''; 8564 e = null;
8565 dom.setAttrib(n, 'mce_style', ''); 8565 },
8566 8566
8567 e = dom.create(na, { 8567
8568 style : dom.getAttrib(n, 'style') 8568 focus : function(sf) {
8569 }); 8569 var oed, t = this, ce = t.settings.content_editable;
8570 8570
8571 dom.replace(e, n, 1); 8571 if (!sf) {
8572 } 8572 // Is not content editable or the selection is outside the area in IE
8573 } 8573 // the IE statement is needed to avoid bluring if element selections inside layers since
8574 }); 8574 // the layer is like it's own document in IE
8575 } 8575 if (!ce && (!isIE || t.selection.getNode().ownerDocument != t.getDoc()))
8576 }; 8576 t.getWin().focus();
8577 8577
8578 t.onPreProcess.add(convert); 8578 }
8579 8579
8580 if (!s.cleanup_on_startup) { 8580 if (EditorManager.activeEditor != t) {
8581 t.onSetContent.add(function(ed, o) { 8581 if ((oed = EditorManager.activeEditor) != null)
8582 if (o.initial) 8582 oed.onDeactivate.dispatch(oed, t);
8583 convert(t, {node : t.getBody(), set : 1}); 8583
8584 }); 8584 t.onActivate.dispatch(t, oed);
8585 } 8585 }
8586 }, 8586
8587 8587 EditorManager._setActive(t);
8588 _convertFonts : function() { 8588 },
8589 var t = this, s = t.settings, dom = t.dom, fz, fzn, sl, cl; 8589
8590 8590 execCallback : function(n) {
8591 // No need 8591 var t = this, f = t.settings[n], s;
8592 if (!s.inline_styles) 8592
8593 return; 8593 if (!f)
8594 8594 return;
8595 // Font pt values and font size names 8595
8596 fz = [8, 10, 12, 14, 18, 24, 36]; 8596 // Look through lookup
8597 fzn = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large']; 8597 if (t.callbackLookup && (s = t.callbackLookup[n])) {
8598 8598 f = s.func;
8599 if (sl = s.font_size_style_values) 8599 s = s.scope;
8600 sl = explode(sl); 8600 }
8601 8601
8602 if (cl = s.font_size_classes) 8602 if (is(f, 'string')) {
8603 cl = explode(cl); 8603 s = f.replace(/\.\w+$/, '');
8604 8604 s = s ? tinymce.resolve(s) : 0;
8605 function process(no) { 8605 f = tinymce.resolve(f);
8606 var n, sp, nl, x; 8606 t.callbackLookup = t.callbackLookup || {};
8607 8607 t.callbackLookup[n] = {func : f, scope : s};
8608 // Keep unit tests happy 8608 }
8609 if (!s.inline_styles) 8609
8610 return; 8610 return f.apply(s || t, Array.prototype.slice.call(arguments, 1));
8611 8611 },
8612 nl = t.dom.select('font', no); 8612
8613 for (x = nl.length - 1; x >= 0; x--) { 8613 translate : function(s) {
8614 n = nl[x]; 8614 var c = this.settings.language || 'en', i18n = EditorManager.i18n;
8615 8615
8616 sp = dom.create('span', { 8616 if (!s)
8617 style : dom.getAttrib(n, 'style'), 8617 return '';
8618 'class' : dom.getAttrib(n, 'class') 8618
8619 }); 8619 return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {
8620 8620 return i18n[c + '.' + b] || '{#' + b + '}';
8621 dom.setStyles(sp, { 8621 });
8622 fontFamily : dom.getAttrib(n, 'face'), 8622 },
8623 color : dom.getAttrib(n, 'color'), 8623
8624 backgroundColor : n.style.backgroundColor 8624 getLang : function(n, dv) {
8625 }); 8625 return EditorManager.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');
8626 8626 },
8627 if (n.size) { 8627
8628 if (sl) 8628 getParam : function(n, dv, ty) {
8629 dom.setStyle(sp, 'fontSize', sl[parseInt(n.size) - 1]); 8629 var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;
8630 else 8630
8631 dom.setAttrib(sp, 'class', cl[parseInt(n.size) - 1]); 8631 if (ty === 'hash') {
8632 } 8632 o = {};
8633 8633
8634 dom.setAttrib(sp, 'mce_style', ''); 8634 if (is(v, 'string')) {
8635 dom.replace(sp, n, 1); 8635 each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {
8636 } 8636 v = v.split('=');
8637 }; 8637
8638 8638 if (v.length > 1)
8639 // Run on cleanup 8639 o[tr(v[0])] = tr(v[1]);
8640 t.onPreProcess.add(function(ed, o) { 8640 else
8641 if (o.get) 8641 o[tr(v[0])] = tr(v);
8642 process(o.node); 8642 });
8643 }); 8643 } else
8644 8644 o = v;
8645 t.onSetContent.add(function(ed, o) { 8645
8646 if (o.initial) 8646 return o;
8647 process(o.node); 8647 }
8648 }); 8648
8649 }, 8649 return v;
8650 8650 },
8651 _isHidden : function() { 8651
8652 var s; 8652 nodeChanged : function(o) {
8653 8653 var t = this, s = t.selection, n = s.getNode() || t.getBody();
8654 if (!isGecko) 8654
8655 return 0; 8655 // Fix for bug #1896577 it seems that this can not be fired while the editor is loading
8656 8656 if (t.initialized) {
8657 // Weird, wheres that cursor selection? 8657 t.onNodeChange.dispatch(
8658 s = this.selection.getSel(); 8658 t,
8659 return (!s || !s.rangeCount || s.rangeCount == 0); 8659 o ? o.controlManager || t.controlManager : t.controlManager,
8660 }, 8660 isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n, // Fix for IE initial state
8661 8661 s.isCollapsed(),
8662 // Fix for bug #1867292 8662 o
8663 _fixNesting : function(s) { 8663 );
8664 var d = [], i; 8664 }
8665 8665 },
8666 s = s.replace(/<(\/)?([^\s>]+)[^>]*?>/g, function(a, b, c) { 8666
8667 var e; 8667 addButton : function(n, s) {
8668 8668 var t = this;
8669 // Handle end element 8669
8670 if (b === '/') { 8670 t.buttons = t.buttons || {};
8671 if (!d.length) 8671 t.buttons[n] = s;
8672 return ''; 8672 },
8673 8673
8674 if (c !== d[d.length - 1].tag) { 8674 addCommand : function(n, f, s) {
8675 for (i=d.length - 1; i>=0; i--) { 8675 this.execCommands[n] = {func : f, scope : s || this};
8676 if (d[i].tag === c) { 8676 },
8677 d[i].close = 1; 8677
8678 break; 8678 addQueryStateHandler : function(n, f, s) {
8679 } 8679 this.queryStateCommands[n] = {func : f, scope : s || this};
8680 } 8680 },
8681 8681
8682 return ''; 8682 addQueryValueHandler : function(n, f, s) {
8683 } else { 8683 this.queryValueCommands[n] = {func : f, scope : s || this};
8684 d.pop(); 8684 },
8685 8685
8686 if (d.length && d[d.length - 1].close) { 8686 addShortcut : function(pa, desc, cmd_func, sc) {
8687 a = a + '</' + d[d.length - 1].tag + '>'; 8687 var t = this, c;
8688 d.pop(); 8688
8689 } 8689 if (!t.settings.custom_shortcuts)
8690 } 8690 return false;
8691 } else { 8691
8692 // Ignore these 8692 t.shortcuts = t.shortcuts || {};
8693 if (/^(br|hr|input|meta|img|link|param|aggregate)$/i.test(c)) 8693
8694 return a; 8694 if (is(cmd_func, 'string')) {
8695 8695 c = cmd_func;
8696 // Ignore closed ones 8696
8697 if (/\/>$/.test(a)) 8697 cmd_func = function() {
8698 return a; 8698 t.execCommand(c, false, null);
8699 8699 };
8700 d.push({tag : c}); // Push start element 8700 }
8701 } 8701
8702 8702 if (is(cmd_func, 'object')) {
8703 return a; 8703 c = cmd_func;
8704 }); 8704
8705 8705 cmd_func = function() {
8706 // End all open tags 8706 t.execCommand(c[0], c[1], c[2]);
8707 for (i=d.length - 1; i>=0; i--) 8707 };
8708 s += '</' + d[i].tag + '>'; 8708 }
8709 8709
8710 return s; 8710 each(explode(pa), function(pa) {
8711 } 8711 var o = {
8712 8712 func : cmd_func,
8713 }); 8713 scope : sc || this,
8714})(); 8714 desc : desc,
8715 8715 alt : false,
8716/* file:jscripts/tiny_mce/classes/EditorCommands.js */ 8716 ctrl : false,
8717 8717 shift : false
8718(function() { 8718 };
8719 var each = tinymce.each, isIE = tinymce.isIE, isGecko = tinymce.isGecko, isOpera = tinymce.isOpera, isWebKit = tinymce.isWebKit; 8719
8720 8720 each(explode(pa, '+'), function(v) {
8721 function isBlock(n) { 8721 switch (v) {
8722 return /^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n.nodeName); 8722 case 'alt':
8723 }; 8723 case 'ctrl':
8724 8724 case 'shift':
8725 tinymce.create('tinymce.EditorCommands', { 8725 o[v] = true;
8726 EditorCommands : function(ed) { 8726 break;
8727 this.editor = ed; 8727
8728 }, 8728 default:
8729 8729 o.charCode = v.charCodeAt(0);
8730 execCommand : function(cmd, ui, val) { 8730 o.keyCode = v.toUpperCase().charCodeAt(0);
8731 var t = this, ed = t.editor, f; 8731 }
8732 8732 });
8733 switch (cmd) { 8733
8734 case 'Cut': 8734 t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;
8735 case 'Copy': 8735 });
8736 case 'Paste': 8736
8737 try { 8737 return true;
8738 ed.getDoc().execCommand(cmd, ui, val); 8738 },
8739 } catch (ex) { 8739
8740 if (isGecko) { 8740 execCommand : function(cmd, ui, val, a) {
8741 ed.windowManager.confirm(ed.getLang('clipboard_msg'), function(s) { 8741 var t = this, s = 0, o, st;
8742 if (s) 8742
8743 window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal'); 8743 if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))
8744 }); 8744 t.focus();
8745 } else 8745
8746 ed.windowManager.alert(ed.getLang('clipboard_no_support')); 8746 o = {};
8747 } 8747 t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);
8748 8748 if (o.terminate)
8749 return true; 8749 return false;
8750 8750
8751 // Ignore these 8751 // Command callback
8752 case 'mceResetDesignMode': 8752 if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {
8753 case 'mceBeginUndoLevel': 8753 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8754 return true; 8754 return true;
8755 8755 }
8756 // Ignore these 8756
8757 case 'unlink': 8757 // Registred commands
8758 t.UnLink(); 8758 if (o = t.execCommands[cmd]) {
8759 return true; 8759 st = o.func.call(o.scope, ui, val);
8760 8760
8761 // Bundle these together 8761 // Fall through on true
8762 case 'JustifyLeft': 8762 if (st !== true) {
8763 case 'JustifyCenter': 8763 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8764 case 'JustifyRight': 8764 return st;
8765 case 'JustifyFull': 8765 }
8766 t.mceJustify(cmd, cmd.substring(7).toLowerCase()); 8766 }
8767 return true; 8767
8768 8768 // Plugin commands
8769 case 'mceEndUndoLevel': 8769 each(t.plugins, function(p) {
8770 case 'mceAddUndoLevel': 8770 if (p.execCommand && p.execCommand(cmd, ui, val)) {
8771 ed.undoManager.add(); 8771 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8772 return true; 8772 s = 1;
8773 8773 return false;
8774 default: 8774 }
8775 f = this[cmd]; 8775 });
8776 8776
8777 if (f) { 8777 if (s)
8778 f.call(this, ui, val); 8778 return true;
8779 return true; 8779
8780 } 8780 // Theme commands
8781 } 8781 if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {
8782 8782 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8783 return false; 8783 return true;
8784 }, 8784 }
8785 8785
8786 Indent : function() { 8786 // Execute global commands
8787 var ed = this.editor, d = ed.dom, s = ed.selection, e, iv, iu; 8787 if (tinymce.GlobalCommands.execCommand(t, cmd, ui, val)) {
8788 8788 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8789 // Setup indent level 8789 return true;
8790 iv = ed.settings.indentation; 8790 }
8791 iu = /[a-z%]+$/i.exec(iv); 8791
8792 iv = parseInt(iv); 8792 // Editor commands
8793 8793 if (t.editorCommands.execCommand(cmd, ui, val)) {
8794 if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) { 8794 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8795 each(this._getSelectedBlocks(), function(e) { 8795 return true;
8796 d.setStyle(e, 'paddingLeft', (parseInt(e.style.paddingLeft || 0) + iv) + iu); 8796 }
8797 }); 8797
8798 8798 // Browser commands
8799 return; 8799 t.getDoc().execCommand(cmd, ui, val);
8800 } 8800 t.onExecCommand.dispatch(t, cmd, ui, val, a);
8801 8801 },
8802 ed.getDoc().execCommand('Indent', false, null); 8802
8803 8803 queryCommandState : function(c) {
8804 if (isIE) { 8804 var t = this, o, s;
8805 d.getParent(s.getNode(), function(n) { 8805
8806 if (n.nodeName == 'BLOCKQUOTE') { 8806 // Is hidden then return undefined
8807 n.dir = n.style.cssText = ''; 8807 if (t._isHidden())
8808 } 8808 return;
8809 }); 8809
8810 } 8810 // Registred commands
8811 }, 8811 if (o = t.queryStateCommands[c]) {
8812 8812 s = o.func.call(o.scope);
8813 Outdent : function() { 8813
8814 var ed = this.editor, d = ed.dom, s = ed.selection, e, v, iv, iu; 8814 // Fall though on true
8815 8815 if (s !== true)
8816 // Setup indent level 8816 return s;
8817 iv = ed.settings.indentation; 8817 }
8818 iu = /[a-z%]+$/i.exec(iv); 8818
8819 iv = parseInt(iv); 8819 // Registred commands
8820 8820 o = t.editorCommands.queryCommandState(c);
8821 if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) { 8821 if (o !== -1)
8822 each(this._getSelectedBlocks(), function(e) { 8822 return o;
8823 v = Math.max(0, parseInt(e.style.paddingLeft || 0) - iv); 8823
8824 d.setStyle(e, 'paddingLeft', v ? v + iu : ''); 8824 // Browser commands
8825 }); 8825 try {
8826 8826 return this.getDoc().queryCommandState(c);
8827 return; 8827 } catch (ex) {
8828 } 8828 // Fails sometimes see bug: 1896577
8829 8829 }
8830 ed.getDoc().execCommand('Outdent', false, null); 8830 },
8831 }, 8831
8832 8832 queryCommandValue : function(c) {
8833 mceSetAttribute : function(u, v) { 8833 var t = this, o, s;
8834 var ed = this.editor, d = ed.dom, e; 8834
8835 8835 // Is hidden then return undefined
8836 if (e = d.getParent(ed.selection.getNode(), d.isBlock)) 8836 if (t._isHidden())
8837 d.setAttrib(e, v.name, v.value); 8837 return;
8838 }, 8838
8839 8839 // Registred commands
8840 mceSetContent : function(u, v) { 8840 if (o = t.queryValueCommands[c]) {
8841 this.editor.setContent(v); 8841 s = o.func.call(o.scope);
8842 }, 8842
8843 8843 // Fall though on true
8844 mceToggleVisualAid : function() { 8844 if (s !== true)
8845 var ed = this.editor; 8845 return s;
8846 8846 }
8847 ed.hasVisual = !ed.hasVisual; 8847
8848 ed.addVisual(); 8848 // Registred commands
8849 }, 8849 o = t.editorCommands.queryCommandValue(c);
8850 8850 if (is(o))
8851 mceReplaceContent : function(u, v) { 8851 return o;
8852 var s = this.editor.selection; 8852
8853 8853 // Browser commands
8854 s.setContent(v.replace(/\{\$selection\}/g, s.getContent({format : 'text'}))); 8854 try {
8855 }, 8855 return this.getDoc().queryCommandValue(c);
8856 8856 } catch (ex) {
8857 mceInsertLink : function(u, v) { 8857 // Fails sometimes see bug: 1896577
8858 var ed = this.editor, s = ed.selection, e = ed.dom.getParent(s.getNode(), 'A'); 8858 }
8859 8859 },
8860 if (tinymce.is(v, 'string')) 8860
8861 v = {href : v}; 8861 show : function() {
8862 8862 var t = this;
8863 function set(e) { 8863
8864 each(v, function(v, k) { 8864 DOM.show(t.getContainer());
8865 ed.dom.setAttrib(e, k, v); 8865 DOM.hide(t.id);
8866 }); 8866 t.load();
8867 }; 8867 },
8868 8868
8869 if (!e) { 8869 hide : function() {
8870 ed.execCommand('CreateLink', false, 'javascript:mctmp(0);'); 8870 var t = this, d = t.getDoc();
8871 each(ed.dom.select('a'), function(e) { 8871
8872 if (e.href == 'javascript:mctmp(0);') 8872 // Fixed bug where IE has a blinking cursor left from the editor
8873 set(e); 8873 if (isIE && d)
8874 }); 8874 d.execCommand('SelectAll');
8875 } else { 8875
8876 if (v.href) 8876 // We must save before we hide so Safari doesn't crash
8877 set(e); 8877 t.save();
8878 else 8878 DOM.hide(t.getContainer());
8879 ed.dom.remove(e, 1); 8879 DOM.setStyle(t.id, 'display', t.orgDisplay);
8880 } 8880 },
8881 }, 8881
8882 8882 isHidden : function() {
8883 UnLink : function() { 8883 return !DOM.isHidden(this.id);
8884 var ed = this.editor, s = ed.selection; 8884 },
8885 8885
8886 if (s.isCollapsed()) 8886 setProgressState : function(b, ti, o) {
8887 s.select(s.getNode()); 8887 this.onSetProgressState.dispatch(this, b, ti, o);
8888 8888
8889 ed.getDoc().execCommand('unlink', false, null); 8889 return b;
8890 s.collapse(0); 8890 },
8891 }, 8891
8892 8892 load : function(o) {
8893 FontName : function(u, v) { 8893 var t = this, e = t.getElement(), h;
8894 var t = this, ed = t.editor, s = ed.selection, e; 8894
8895 8895 if (e) {
8896 if (!v) { 8896 o = o || {};
8897 if (s.isCollapsed()) 8897 o.load = true;
8898 s.select(s.getNode()); 8898
8899 8899 // Double encode existing entities in the value
8900 t.RemoveFormat(); 8900 h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);
8901 } else { 8901 o.element = e;
8902 if (ed.settings.convert_fonts_to_spans) 8902
8903 t._applyInlineStyle('span', {style : {fontFamily : v}}); 8903 if (!o.no_events)
8904 else 8904 t.onLoadContent.dispatch(t, o);
8905 ed.getDoc().execCommand('FontName', false, v); 8905
8906 } 8906 o.element = e = null;
8907 }, 8907
8908 8908 return h;
8909 FontSize : function(u, v) { 8909 }
8910 var ed = this.editor, s = ed.settings, fc, fs; 8910 },
8911 8911
8912 // Use style options instead 8912 save : function(o) {
8913 if (s.convert_fonts_to_spans && v >= 1 && v <= 7) { 8913 var t = this, e = t.getElement(), h, f;
8914 fs = tinymce.explode(s.font_size_style_values); 8914
8915 fc = tinymce.explode(s.font_size_classes); 8915 if (!e || !t.initialized)
8916 8916 return;
8917 if (fc) 8917
8918 v = fc[v - 1] || v; 8918 o = o || {};
8919 else 8919 o.save = true;
8920 v = fs[v - 1] || v; 8920
8921 } 8921 // Add undo level will trigger onchange event
8922 8922 if (!o.no_events) {
8923 if (v >= 1 && v <= 7) 8923 t.undoManager.typing = 0;
8924 ed.getDoc().execCommand('FontSize', false, v); 8924 t.undoManager.add();
8925 else 8925 }
8926 this._applyInlineStyle('span', {style : {fontSize : v}}); 8926
8927 }, 8927 o.element = e;
8928 8928 h = o.content = t.getContent(o);
8929 queryCommandValue : function(c) { 8929
8930 var f = this['queryValue' + c]; 8930 if (!o.no_events)
8931 8931 t.onSaveContent.dispatch(t, o);
8932 if (f) 8932
8933 return f.call(this, c); 8933 h = o.content;
8934 8934
8935 return false; 8935 if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {
8936 }, 8936 e.innerHTML = h;
8937 8937
8938 queryCommandState : function(cmd) { 8938 // Update hidden form element
8939 var f; 8939 if (f = DOM.getParent(t.id, 'form')) {
8940 8940 each(f.elements, function(e) {
8941 switch (cmd) { 8941 if (e.name == t.id) {
8942 // Bundle these together 8942 e.value = h;
8943 case 'JustifyLeft': 8943 return false;
8944 case 'JustifyCenter': 8944 }
8945 case 'JustifyRight': 8945 });
8946 case 'JustifyFull': 8946 }
8947 return this.queryStateJustify(cmd, cmd.substring(7).toLowerCase()); 8947 } else
8948 8948 e.value = h;
8949 default: 8949
8950 if (f = this['queryState' + cmd]) 8950 o.element = e = null;
8951 return f.call(this, cmd); 8951
8952 } 8952 return h;
8953 8953 },
8954 return -1; 8954
8955 }, 8955 setContent : function(h, o) {
8956 8956 var t = this;
8957 _queryState : function(c) { 8957
8958 try { 8958 o = o || {};
8959 return this.editor.getDoc().queryCommandState(c); 8959 o.format = o.format || 'html';
8960 } catch (ex) { 8960 o.set = true;
8961 // Ignore exception 8961 o.content = h;
8962 } 8962
8963 }, 8963 if (!o.no_events)
8964 8964 t.onBeforeSetContent.dispatch(t, o);
8965 _queryVal : function(c) { 8965
8966 try { 8966 // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content
8967 return this.editor.getDoc().queryCommandValue(c); 8967 // It will also be impossible to place the caret in the editor unless there is a BR element present
8968 } catch (ex) { 8968 if (!tinymce.isIE && (h.length === 0 || /^\s+$/.test(h))) {
8969 // Ignore exception 8969 o.content = t.dom.setHTML(t.getBody(), '<br mce_bogus="1" />');
8970 } 8970 o.format = 'raw';
8971 }, 8971 }
8972 8972
8973 queryValueFontSize : function() { 8973 o.content = t.dom.setHTML(t.getBody(), tinymce.trim(o.content));
8974 var ed = this.editor, v = 0, p; 8974
8975 8975 if (o.format != 'raw' && t.settings.cleanup) {
8976 if (p = ed.dom.getParent(ed.selection.getNode(), 'SPAN')) 8976 o.getInner = true;
8977 v = p.style.fontSize; 8977 o.content = t.dom.setHTML(t.getBody(), t.serializer.serialize(t.getBody(), o));
8978 8978 }
8979 if (!v && (isOpera || isWebKit)) { 8979
8980 if (p = ed.dom.getParent(ed.selection.getNode(), 'FONT')) 8980 if (!o.no_events)
8981 v = p.size; 8981 t.onSetContent.dispatch(t, o);
8982 8982
8983 return v; 8983 return o.content;
8984 } 8984 },
8985 8985
8986 return v || this._queryVal('FontSize'); 8986 getContent : function(o) {
8987 }, 8987 var t = this, h;
8988 8988
8989 queryValueFontName : function() { 8989 o = o || {};
8990 var ed = this.editor, v = 0, p; 8990 o.format = o.format || 'html';
8991 8991 o.get = true;
8992 if (p = ed.dom.getParent(ed.selection.getNode(), 'FONT')) 8992
8993 v = p.face; 8993 if (!o.no_events)
8994 8994 t.onBeforeGetContent.dispatch(t, o);
8995 if (p = ed.dom.getParent(ed.selection.getNode(), 'SPAN')) 8995
8996 v = p.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase(); 8996 if (o.format != 'raw' && t.settings.cleanup) {
8997 8997 o.getInner = true;
8998 if (!v) 8998 h = t.serializer.serialize(t.getBody(), o);
8999 v = this._queryVal('FontName'); 8999 } else
9000 9000 h = t.getBody().innerHTML;
9001 return v; 9001
9002 }, 9002 h = h.replace(/^\s*|\s*$/g, '');
9003 9003 o.content = h;
9004 mceJustify : function(c, v) { 9004
9005 var ed = this.editor, se = ed.selection, n = se.getNode(), nn = n.nodeName, bl, nb, dom = ed.dom, rm; 9005 if (!o.no_events)
9006 9006 t.onGetContent.dispatch(t, o);
9007 if (ed.settings.inline_styles && this.queryStateJustify(c, v)) 9007
9008 rm = 1; 9008 return o.content;
9009 9009 },
9010 bl = dom.getParent(n, ed.dom.isBlock); 9010
9011 9011 isDirty : function() {
9012 if (nn == 'IMG') { 9012 var t = this;
9013 if (v == 'full') 9013
9014 return; 9014 return tinymce.trim(t.startContent) != tinymce.trim(t.getContent({format : 'raw', no_events : 1})) && !t.isNotDirty;
9015 9015 },
9016 if (rm) { 9016
9017 if (v == 'center') 9017 getContainer : function() {
9018 dom.setStyle(bl || n.parentNode, 'textAlign', ''); 9018 var t = this;
9019 9019
9020 dom.setStyle(n, 'float', ''); 9020 if (!t.container)
9021 this.mceRepaint(); 9021 t.container = DOM.get(t.editorContainer || t.id + '_parent');
9022 return; 9022
9023 } 9023 return t.container;
9024 9024 },
9025 if (v == 'center') { 9025
9026 // Do not change table elements 9026 getContentAreaContainer : function() {
9027 if (bl && /^(TD|TH)$/.test(bl.nodeName)) 9027 return this.contentAreaContainer;
9028 bl = 0; 9028 },
9029 9029
9030 if (!bl || bl.childNodes.length > 1) { 9030 getElement : function() {
9031 nb = dom.create('p'); 9031 return DOM.get(this.settings.content_element || this.id);
9032 nb.appendChild(n.cloneNode(false)); 9032 },
9033 9033
9034 if (bl) 9034 getWin : function() {
9035 dom.insertAfter(nb, bl); 9035 var t = this, e;
9036 else 9036
9037 dom.insertAfter(nb, n); 9037 if (!t.contentWindow) {
9038 9038 e = DOM.get(t.id + "_ifr");
9039 dom.remove(n); 9039
9040 n = nb.firstChild; 9040 if (e)
9041 bl = nb; 9041 t.contentWindow = e.contentWindow;
9042 } 9042 }
9043 9043
9044 dom.setStyle(bl, 'textAlign', v); 9044 return t.contentWindow;
9045 dom.setStyle(n, 'float', ''); 9045 },
9046 } else { 9046
9047 dom.setStyle(n, 'float', v); 9047 getDoc : function() {
9048 dom.setStyle(bl || n.parentNode, 'textAlign', ''); 9048 var t = this, w;
9049 } 9049
9050 9050 if (!t.contentDocument) {
9051 this.mceRepaint(); 9051 w = t.getWin();
9052 return; 9052
9053 } 9053 if (w)
9054 9054 t.contentDocument = w.document;
9055 // Handle the alignment outselfs, less quirks in all browsers 9055 }
9056 if (ed.settings.inline_styles && ed.settings.forced_root_block) { 9056
9057 if (rm) 9057 return t.contentDocument;
9058 v = ''; 9058 },
9059 9059
9060 each(this._getSelectedBlocks(dom.getParent(se.getStart(), dom.isBlock), dom.getParent(se.getEnd(), dom.isBlock)), function(e) { 9060 getBody : function() {
9061 dom.setAttrib(e, 'align', ''); 9061 return this.bodyElement || this.getDoc().body;
9062 dom.setStyle(e, 'textAlign', v == 'full' ? 'justify' : v); 9062 },
9063 }); 9063
9064 9064 convertURL : function(u, n, e) {
9065 return; 9065 var t = this, s = t.settings;
9066 } else if (!rm) 9066
9067 ed.getDoc().execCommand(c, false, null); 9067 // Use callback instead
9068 9068 if (s.urlconverter_callback)
9069 if (ed.settings.inline_styles) { 9069 return t.execCallback('urlconverter_callback', u, e, true, n);
9070 if (rm) { 9070
9071 dom.getParent(ed.selection.getNode(), function(n) { 9071 // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs
9072 if (n.style && n.style.textAlign) 9072 if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)
9073 dom.setStyle(n, 'textAlign', ''); 9073 return u;
9074 }); 9074
9075 9075 // Convert to relative
9076 return; 9076 if (s.relative_urls)
9077 } 9077 return t.documentBaseURI.toRelative(u);
9078 9078
9079 each(dom.select('*'), function(n) { 9079 // Convert to absolute
9080 var v = n.align; 9080 u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);
9081 9081
9082 if (v) { 9082 return u;
9083 if (v == 'full') 9083 },
9084 v = 'justify'; 9084
9085 9085 addVisual : function(e) {
9086 dom.setStyle(n, 'textAlign', v); 9086 var t = this, s = t.settings;
9087 dom.setAttrib(n, 'align', ''); 9087
9088 } 9088 e = e || t.getBody();
9089 }); 9089
9090 } 9090 if (!is(t.hasVisual))
9091 }, 9091 t.hasVisual = s.visual;
9092 9092
9093 mceSetCSSClass : function(u, v) { 9093 each(t.dom.select('table,a', e), function(e) {
9094 this.mceSetStyleInfo(0, {command : 'setattrib', name : 'class', value : v}); 9094 var v;
9095 }, 9095
9096 9096 switch (e.nodeName) {
9097 getSelectedElement : function() { 9097 case 'TABLE':
9098 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; 9098 v = t.dom.getAttrib(e, 'border');
9099 9099
9100 if (se.isCollapsed() || r.item) 9100 if (!v || v == '0') {
9101 return se.getNode(); 9101 if (t.hasVisual)
9102 9102 t.dom.addClass(e, s.visual_table_class);
9103 // Setup regexp 9103 else
9104 re = ed.settings.merge_styles_invalid_parents; 9104 t.dom.removeClass(e, s.visual_table_class);
9105 if (tinymce.is(re, 'string')) 9105 }
9106 re = new RegExp(re, 'i'); 9106
9107 9107 return;
9108 if (isIE) { 9108
9109 r1 = r.duplicate(); 9109 case 'A':
9110 r1.collapse(true); 9110 v = t.dom.getAttrib(e, 'name');
9111 sc = r1.parentElement(); 9111
9112 9112 if (v) {
9113 r2 = r.duplicate(); 9113 if (t.hasVisual)
9114 r2.collapse(false); 9114 t.dom.addClass(e, 'mceItemAnchor');
9115 ec = r2.parentElement(); 9115 else
9116 9116 t.dom.removeClass(e, 'mceItemAnchor');
9117 if (sc != ec) { 9117 }
9118 r1.move('character', 1); 9118
9119 sc = r1.parentElement(); 9119 return;
9120 } 9120 }
9121 9121 });
9122 if (sc == ec) { 9122
9123 r1 = r.duplicate(); 9123 t.onVisualAid.dispatch(t, e, t.hasVisual);
9124 r1.moveToElementText(sc); 9124 },
9125 9125
9126 if (r1.compareEndPoints('StartToStart', r) == 0 && r1.compareEndPoints('EndToEnd', r) == 0) 9126 remove : function() {
9127 return re && re.test(sc.nodeName) ? null : sc; 9127 var t = this, e = t.getContainer();
9128 } 9128
9129 } else { 9129 t.removed = 1; // Cancels post remove event execution
9130 function getParent(n) { 9130 t.hide();
9131 return dom.getParent(n, function(n) {return n.nodeType == 1;}); 9131
9132 }; 9132 t.execCallback('remove_instance_callback', t);
9133 9133 t.onRemove.dispatch(t);
9134 sc = r.startContainer; 9134
9135 ec = r.endContainer; 9135 // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command
9136 so = r.startOffset; 9136 t.onExecCommand.listeners = [];
9137 eo = r.endOffset; 9137
9138 9138 EditorManager.remove(t);
9139 if (!r.collapsed) { 9139 DOM.remove(e);
9140 if (sc == ec) { 9140 },
9141 if (so - eo < 2) { 9141
9142 if (sc.hasChildNodes()) { 9142 destroy : function(s) {
9143 sp = sc.childNodes[so]; 9143 var t = this;
9144 return re && re.test(sp.nodeName) ? null : sp; 9144
9145 } 9145 // One time is enough
9146 } 9146 if (t.destroyed)
9147 } 9147 return;
9148 } 9148
9149 9149 if (!s) {
9150 if (sc.nodeType != 3 || ec.nodeType != 3) 9150 tinymce.removeUnload(t.destroy);
9151 return null; 9151 tinyMCE.onBeforeUnload.remove(t._beforeUnload);
9152 9152
9153 if (so == 0) { 9153 // Manual destroy
9154 sp = getParent(sc); 9154 if (t.theme && t.theme.destroy)
9155 9155 t.theme.destroy();
9156 if (sp && sp.firstChild != sc) 9156
9157 sp = null; 9157 // Destroy controls, selection and dom
9158 } 9158 t.controlManager.destroy();
9159 9159 t.selection.destroy();
9160 if (so == sc.nodeValue.length) { 9160 t.dom.destroy();
9161 e = sc.nextSibling; 9161
9162 9162 // Remove all events
9163 if (e && e.nodeType == 1) 9163
9164 sp = sc.nextSibling; 9164 // Don't clear the window or document if content editable
9165 } 9165 // is enabled since other instances might still be present
9166 9166 if (!t.settings.content_editable) {
9167 if (eo == 0) { 9167 Event.clear(t.getWin());
9168 e = ec.previousSibling; 9168 Event.clear(t.getDoc());
9169 9169 }
9170 if (e && e.nodeType == 1) 9170
9171 ep = e; 9171 Event.clear(t.getBody());
9172 } 9172 Event.clear(t.formElement);
9173 9173 }
9174 if (eo == ec.nodeValue.length) { 9174
9175 ep = getParent(ec); 9175 if (t.formElement) {
9176 9176 t.formElement.submit = t.formElement._mceOldSubmit;
9177 if (ep && ep.lastChild != ec) 9177 t.formElement._mceOldSubmit = null;
9178 ep = null; 9178 }
9179 } 9179
9180 9180 t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;
9181 // Same element 9181
9182 if (sp == ep) 9182 if (t.selection)
9183 return re && sp && re.test(sp.nodeName) ? null : sp; 9183 t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;
9184 } 9184
9185 9185 t.destroyed = 1;
9186 return null; 9186 },
9187 }, 9187
9188 9188 // Internal functions
9189 InsertHorizontalRule : function() { 9189
9190 // Fix for Gecko <hr size="1" /> issue and IE bug rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]"); 9190 _addEvents : function() {
9191 if (isGecko || isIE) 9191 // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset
9192 this.editor.selection.setContent('<hr />'); 9192 var t = this, i, s = t.settings, lo = {
9193 else 9193 mouseup : 'onMouseUp',
9194 this.editor.getDoc().execCommand('InsertHorizontalRule', false, ''); 9194 mousedown : 'onMouseDown',
9195 }, 9195 click : 'onClick',
9196 9196 keyup : 'onKeyUp',
9197 RemoveFormat : function() { 9197 keydown : 'onKeyDown',
9198 var t = this, ed = t.editor, s = ed.selection, b; 9198 keypress : 'onKeyPress',
9199 9199 submit : 'onSubmit',
9200 // Safari breaks tables 9200 reset : 'onReset',
9201 if (isWebKit) 9201 contextmenu : 'onContextMenu',
9202 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'}); 9202 dblclick : 'onDblClick',
9203 else 9203 paste : 'onPaste' // Doesn't work in all browsers yet
9204 ed.getDoc().execCommand('RemoveFormat', false, null); 9204 };
9205 9205
9206 t.mceSetStyleInfo(0, {command : 'removeformat'}); 9206 function eventHandler(e, o) {
9207 ed.addVisual(); 9207 var ty = e.type;
9208 }, 9208
9209 9209 // Don't fire events when it's removed
9210 mceSetStyleInfo : function(u, v) { 9210 if (t.removed)
9211 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; 9211 return;
9212 9212
9213 function set(n, e) { 9213 // Generic event handler
9214 if (n.nodeType == 1) { 9214 if (t.onEvent.dispatch(t, e, o) !== false) {
9215 switch (v.command) { 9215 // Specific event handler
9216 case 'setattrib': 9216 t[lo[e.fakeType || e.type]].dispatch(t, e, o);
9217 return dom.setAttrib(n, v.name, v.value); 9217 }
9218 9218 };
9219 case 'setstyle': 9219
9220 return dom.setStyle(n, v.name, v.value); 9220 // Add DOM events
9221 9221 each(lo, function(v, k) {
9222 case 'removeformat': 9222 switch (k) {
9223 return dom.setAttrib(n, 'class', ''); 9223 case 'contextmenu':
9224 } 9224 if (tinymce.isOpera) {
9225 } 9225 // Fake contextmenu on Opera
9226 }; 9226 t.dom.bind(t.getBody(), 'mousedown', function(e) {
9227 9227 if (e.ctrlKey) {
9228 // Setup regexp 9228 e.fakeType = 'contextmenu';
9229 re = ed.settings.merge_styles_invalid_parents; 9229 eventHandler(e);
9230 if (tinymce.is(re, 'string')) 9230 }
9231 re = new RegExp(re, 'i'); 9231 });
9232 9232 } else
9233 // Set style info on selected element 9233 t.dom.bind(t.getBody(), k, eventHandler);
9234 if ((e = t.getSelectedElement()) && !ed.settings.force_span_wrappers) 9234 break;
9235 set(e, 1); 9235
9236 else { 9236 case 'paste':
9237 // Generate wrappers and set styles on them 9237 t.dom.bind(t.getBody(), k, function(e) {
9238 d.execCommand('FontName', false, '__'); 9238 eventHandler(e);
9239 each(isWebKit ? dom.select('span') : dom.select('font'), function(n) { 9239 });
9240 var sp, e; 9240 break;
9241 9241
9242 if (dom.getAttrib(n, 'face') == '__' || n.style.fontFamily === '__') { 9242 case 'submit':
9243 sp = dom.create(nn, {mce_new : '1'}); 9243 case 'reset':
9244 9244 t.dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);
9245 set(sp); 9245 break;
9246 9246
9247 each (n.childNodes, function(n) { 9247 default:
9248 sp.appendChild(n.cloneNode(true)); 9248 t.dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);
9249 }); 9249 }
9250 9250 });
9251 dom.replace(sp, n); 9251
9252 } 9252 t.dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {
9253 }); 9253 t.focus(true);
9254 } 9254 });
9255 9255
9256 // Remove wrappers inside new ones 9256
9257 each(dom.select(nn).reverse(), function(n) { 9257 // Fixes bug where a specified document_base_uri could result in broken images
9258 var p = n.parentNode; 9258 // This will also fix drag drop of images in Gecko
9259 9259 if (tinymce.isGecko) {
9260 // Check if it's an old span in a new wrapper 9260 // Convert all images to absolute URLs
9261 if (!dom.getAttrib(n, 'mce_new')) { 9261/* t.onSetContent.add(function(ed, o) {
9262 // Find new wrapper 9262 each(ed.dom.select('img'), function(e) {
9263 p = dom.getParent(n, function(n) { 9263 var v;
9264 return n.nodeType == 1 && dom.getAttrib(n, 'mce_new'); 9264
9265 }); 9265 if (v = e.getAttribute('mce_src'))
9266 9266 e.src = t.documentBaseURI.toAbsolute(v);
9267 if (p) 9267 })
9268 dom.remove(n, 1); 9268 });*/
9269 } 9269
9270 }); 9270 t.dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {
9271 9271 var v;
9272 // Merge wrappers with parent wrappers 9272
9273 each(dom.select(nn).reverse(), function(n) { 9273 e = e.target;
9274 var p = n.parentNode; 9274
9275 9275 if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('mce_src')))
9276 if (!p || !dom.getAttrib(n, 'mce_new')) 9276 e.src = t.documentBaseURI.toAbsolute(v);
9277 return; 9277 });
9278 9278 }
9279 if (ed.settings.force_span_wrappers && p.nodeName != 'SPAN') 9279
9280 return; 9280 // Set various midas options in Gecko
9281 9281 if (isGecko) {
9282 // Has parent of the same type and only child 9282 function setOpts() {
9283 if (p.nodeName == nn.toUpperCase() && p.childNodes.length == 1) 9283 var t = this, d = t.getDoc(), s = t.settings;
9284 return dom.remove(p, 1); 9284
9285 9285 if (isGecko && !s.readonly) {
9286 // Has parent that is more suitable to have the class and only child 9286 if (t._isHidden()) {
9287 if (n.nodeType == 1 && (!re || !re.test(p.nodeName)) && p.childNodes.length == 1) { 9287 try {
9288 set(p); // Set style info on parent instead 9288 if (!s.content_editable)
9289 dom.setAttrib(n, 'class', ''); 9289 d.designMode = 'On';
9290 } 9290 } catch (ex) {
9291 }); 9291 // Fails if it's hidden
9292 9292 }
9293 // Remove empty wrappers 9293 }
9294 each(dom.select(nn).reverse(), function(n) { 9294
9295 if (dom.getAttrib(n, 'mce_new') || (dom.getAttribs(n).length <= 1 && n.className === '')) { 9295 try {
9296 if (!dom.getAttrib(n, 'class') && !dom.getAttrib(n, 'style')) 9296 // Try new Gecko method
9297 return dom.remove(n, 1); 9297 d.execCommand("styleWithCSS", 0, false);
9298 9298 } catch (ex) {
9299 dom.setAttrib(n, 'mce_new', ''); // Remove mce_new marker 9299 // Use old method
9300 } 9300 if (!t._isHidden())
9301 }); 9301 try {d.execCommand("useCSS", 0, true);} catch (ex) {}
9302 9302 }
9303 s.moveToBookmark(b); 9303
9304 }, 9304 if (!s.table_inline_editing)
9305 9305 try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}
9306 queryStateJustify : function(c, v) { 9306
9307 var ed = this.editor, n = ed.selection.getNode(), dom = ed.dom; 9307 if (!s.object_resizing)
9308 9308 try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}
9309 if (n && n.nodeName == 'IMG') { 9309 }
9310 if (dom.getStyle(n, 'float') == v) 9310 };
9311 return 1; 9311
9312 9312 t.onBeforeExecCommand.add(setOpts);
9313 return n.parentNode.style.textAlign == v; 9313 t.onMouseDown.add(setOpts);
9314 } 9314 }
9315 9315
9316 n = dom.getParent(ed.selection.getStart(), function(n) { 9316 // Add node change handlers
9317 return n.nodeType == 1 && n.style.textAlign; 9317 t.onMouseUp.add(t.nodeChanged);
9318 }); 9318 t.onClick.add(t.nodeChanged);
9319 9319 t.onKeyUp.add(function(ed, e) {
9320 if (v == 'full') 9320 var c = e.keyCode;
9321 v = 'justify'; 9321
9322 9322 if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)
9323 if (ed.settings.inline_styles) 9323 t.nodeChanged();
9324 return (n && n.style.textAlign == v); 9324 });
9325 9325
9326 return this._queryState(c); 9326 // Add reset handler
9327 }, 9327 t.onReset.add(function() {
9328 9328 t.setContent(t.startContent, {format : 'raw'});
9329 ForeColor : function(ui, v) { 9329 });
9330 var ed = this.editor; 9330
9331 9331 // Add shortcuts
9332 if (ed.settings.convert_fonts_to_spans) { 9332 if (s.custom_shortcuts) {
9333 this._applyInlineStyle('span', {style : {color : v}}); 9333 if (s.custom_undo_redo_keyboard_shortcuts) {
9334 return; 9334 t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');
9335 } else 9335 t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');
9336 ed.getDoc().execCommand('ForeColor', false, v); 9336 }
9337 }, 9337
9338 9338 // Add default shortcuts for gecko
9339 HiliteColor : function(ui, val) { 9339 if (isGecko) {
9340 var t = this, ed = t.editor, d = ed.getDoc(); 9340 t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
9341 9341 t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
9342 if (ed.settings.convert_fonts_to_spans) { 9342 t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
9343 this._applyInlineStyle('span', {style : {backgroundColor : val}}); 9343 }
9344 return; 9344
9345 } 9345 // BlockFormat shortcuts keys
9346 9346 for (i=1; i<=6; i++)
9347 function set(s) { 9347 t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, '<h' + i + '>']);
9348 if (!isGecko) 9348
9349 return; 9349 t.addShortcut('ctrl+7', '', ['FormatBlock', false, '<p>']);
9350 9350 t.addShortcut('ctrl+8', '', ['FormatBlock', false, '<div>']);
9351 try { 9351 t.addShortcut('ctrl+9', '', ['FormatBlock', false, '<address>']);
9352 // Try new Gecko method 9352
9353 d.execCommand("styleWithCSS", 0, s); 9353 function find(e) {
9354 } catch (ex) { 9354 var v = null;
9355 // Use old 9355
9356 d.execCommand("useCSS", 0, !s); 9356 if (!e.altKey && !e.ctrlKey && !e.metaKey)
9357 } 9357 return v;
9358 }; 9358
9359 9359 each(t.shortcuts, function(o) {
9360 if (isGecko || isOpera) { 9360 if (tinymce.isMac && o.ctrl != e.metaKey)
9361 set(true); 9361 return;
9362 d.execCommand('hilitecolor', false, val); 9362 else if (!tinymce.isMac && o.ctrl != e.ctrlKey)
9363 set(false); 9363 return;
9364 } else 9364
9365 d.execCommand('BackColor', false, val); 9365 if (o.alt != e.altKey)
9366 }, 9366 return;
9367 9367
9368 Undo : function() { 9368 if (o.shift != e.shiftKey)
9369 var ed = this.editor; 9369 return;
9370 9370
9371 if (ed.settings.custom_undo_redo) { 9371 if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {
9372 ed.undoManager.undo(); 9372 v = o;
9373 ed.nodeChanged(); 9373 return false;
9374 } else 9374 }
9375 ed.getDoc().execCommand('Undo', false, null); 9375 });
9376 }, 9376
9377 9377 return v;
9378 Redo : function() { 9378 };
9379 var ed = this.editor; 9379
9380 9380 t.onKeyUp.add(function(ed, e) {
9381 if (ed.settings.custom_undo_redo) { 9381 var o = find(e);
9382 ed.undoManager.redo(); 9382
9383 ed.nodeChanged(); 9383 if (o)
9384 } else 9384 return Event.cancel(e);
9385 ed.getDoc().execCommand('Redo', false, null); 9385 });
9386 }, 9386
9387 9387 t.onKeyPress.add(function(ed, e) {
9388 FormatBlock : function(ui, val) { 9388 var o = find(e);
9389 var t = this, ed = t.editor, s = ed.selection, dom = ed.dom, bl, nb, b; 9389
9390 9390 if (o)
9391 function isBlock(n) { 9391 return Event.cancel(e);
9392 return /^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName); 9392 });
9393 }; 9393
9394 9394 t.onKeyDown.add(function(ed, e) {
9395 bl = dom.getParent(s.getNode(), function(n) { 9395 var o = find(e);
9396 return isBlock(n); 9396
9397 }); 9397 if (o) {
9398 9398 o.func.call(o.scope);
9399 // IE has an issue where it removes the parent div if you change format on the paragrah in <div><p>Content</p></div> 9399 return Event.cancel(e);
9400 // FF and Opera doesn't change parent DIV elements if you switch format 9400 }
9401 if (bl) { 9401 });
9402 if ((isIE && isBlock(bl.parentNode)) || bl.nodeName == 'DIV') { 9402 }
9403 // Rename block element 9403
9404 nb = ed.dom.create(val); 9404 if (tinymce.isIE) {
9405 9405 // Fix so resize will only update the width and height attributes not the styles of an image
9406 each(dom.getAttribs(bl), function(v) { 9406 // It will also block mceItemNoResize items
9407 dom.setAttrib(nb, v.nodeName, dom.getAttrib(bl, v.nodeName)); 9407 t.dom.bind(t.getDoc(), 'controlselect', function(e) {
9408 }); 9408 var re = t.resizeInfo, cb;
9409 9409
9410 b = s.getBookmark(); 9410 e = e.target;
9411 dom.replace(nb, bl, 1); 9411
9412 s.moveToBookmark(b); 9412 // Don't do this action for non image elements
9413 ed.nodeChanged(); 9413 if (e.nodeName !== 'IMG')
9414 return; 9414 return;
9415 } 9415
9416 } 9416 if (re)
9417 9417 t.dom.unbind(re.node, re.ev, re.cb);
9418 val = ed.settings.forced_root_block ? (val || '<p>') : val; 9418
9419 9419 if (!t.dom.hasClass(e, 'mceItemNoResize')) {
9420 if (val.indexOf('<') == -1) 9420 ev = 'resizeend';
9421 val = '<' + val + '>'; 9421 cb = t.dom.bind(e, ev, function(e) {
9422 9422 var v;
9423 if (tinymce.isGecko) 9423
9424 val = val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi, '$1'); 9424 e = e.target;
9425 9425
9426 ed.getDoc().execCommand('FormatBlock', false, val); 9426 if (v = t.dom.getStyle(e, 'width')) {
9427 }, 9427 t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));
9428 9428 t.dom.setStyle(e, 'width', '');
9429 mceCleanup : function() { 9429 }
9430 var ed = this.editor, s = ed.selection, b = s.getBookmark(); 9430
9431 ed.setContent(ed.getContent()); 9431 if (v = t.dom.getStyle(e, 'height')) {
9432 s.moveToBookmark(b); 9432 t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));
9433 }, 9433 t.dom.setStyle(e, 'height', '');
9434 9434 }
9435 mceRemoveNode : function(ui, val) { 9435 });
9436 var ed = this.editor, s = ed.selection, b, n = val || s.getNode(); 9436 } else {
9437 9437 ev = 'resizestart';
9438 // Make sure that the body node isn't removed 9438 cb = t.dom.bind(e, 'resizestart', Event.cancel, Event);
9439 if (n == ed.getBody()) 9439 }
9440 return; 9440
9441 9441 re = t.resizeInfo = {
9442 b = s.getBookmark(); 9442 node : e,
9443 ed.dom.remove(n, 1); 9443 ev : ev,
9444 s.moveToBookmark(b); 9444 cb : cb
9445 ed.nodeChanged(); 9445 };
9446 }, 9446 });
9447 9447
9448 mceSelectNodeDepth : function(ui, val) { 9448 t.onKeyDown.add(function(ed, e) {
9449 var ed = this.editor, s = ed.selection, c = 0; 9449 switch (e.keyCode) {
9450 9450 case 8:
9451 ed.dom.getParent(s.getNode(), function(n) { 9451 // Fix IE control + backspace browser bug
9452 if (n.nodeType == 1 && c++ == val) { 9452 if (t.selection.getRng().item) {
9453 s.select(n); 9453 t.selection.getRng().item(0).removeNode();
9454 ed.nodeChanged(); 9454 return Event.cancel(e);
9455 return false; 9455 }
9456 } 9456 }
9457 }, ed.getBody()); 9457 });
9458 }, 9458
9459 9459 /*if (t.dom.boxModel) {
9460 mceSelectNode : function(u, v) { 9460 t.getBody().style.height = '100%';
9461 this.editor.selection.select(v); 9461
9462 }, 9462 Event.add(t.getWin(), 'resize', function(e) {
9463 9463 var docElm = t.getDoc().documentElement;
9464 mceInsertContent : function(ui, val) { 9464
9465 this.editor.selection.setContent(val); 9465 docElm.style.height = (docElm.offsetHeight - 10) + 'px';
9466 }, 9466 });
9467 9467 }*/
9468 mceInsertRawHTML : function(ui, val) { 9468 }
9469 var ed = this.editor; 9469
9470 9470 if (tinymce.isOpera) {
9471 ed.selection.setContent('tiny_mce_marker'); 9471 t.onClick.add(function(ed, e) {
9472 ed.setContent(ed.getContent().replace(/tiny_mce_marker/g, val)); 9472 Event.prevent(e);
9473 }, 9473 });
9474 9474 }
9475 mceRepaint : function() { 9475
9476 var s, b, e = this.editor; 9476 // Add custom undo/redo handlers
9477 9477 if (s.custom_undo_redo) {
9478 if (tinymce.isGecko) { 9478 function addUndo() {
9479 try { 9479 t.undoManager.typing = 0;
9480 s = e.selection; 9480 t.undoManager.add();
9481 b = s.getBookmark(true); 9481 };
9482 9482
9483 if (s.getSel()) 9483 // Add undo level on editor blur
9484 s.getSel().selectAllChildren(e.getBody()); 9484 if (tinymce.isIE) {
9485 9485 t.dom.bind(t.getWin(), 'blur', function(e) {
9486 s.collapse(true); 9486 var n;
9487 s.moveToBookmark(b); 9487
9488 } catch (ex) { 9488 // Check added for fullscreen bug
9489 // Ignore 9489 if (t.selection) {
9490 } 9490 n = t.selection.getNode();
9491 } 9491
9492 }, 9492 // Add undo level is selection was lost to another document
9493 9493 if (!t.removed && n.ownerDocument && n.ownerDocument != t.getDoc())
9494 queryStateUnderline : function() { 9494 addUndo();
9495 var ed = this.editor, n = ed.selection.getNode(); 9495 }
9496 9496 });
9497 if (n && n.nodeName == 'A') 9497 } else {
9498 return false; 9498 t.dom.bind(t.getDoc(), 'blur', function() {
9499 9499 if (t.selection && !t.removed)
9500 return this._queryState('Underline'); 9500 addUndo();
9501 }, 9501 });
9502 9502 }
9503 queryStateOutdent : function() { 9503
9504 var ed = this.editor, n; 9504 t.onMouseDown.add(addUndo);
9505 9505
9506 if (ed.settings.inline_styles) { 9506 t.onKeyUp.add(function(ed, e) {
9507 if ((n = ed.dom.getParent(ed.selection.getStart(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0) 9507 if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey) {
9508 return true; 9508 t.undoManager.typing = 0;
9509 9509 t.undoManager.add();
9510 if ((n = ed.dom.getParent(ed.selection.getEnd(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0) 9510 }
9511 return true; 9511 });
9512 } 9512
9513 9513 t.onKeyDown.add(function(ed, e) {
9514 return this.queryStateInsertUnorderedList() || this.queryStateInsertOrderedList() || (!ed.settings.inline_styles && !!ed.dom.getParent(ed.selection.getNode(), 'BLOCKQUOTE')); 9514 // Is caracter positon keys
9515 }, 9515 if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) {
9516 9516 if (t.undoManager.typing) {
9517 queryStateInsertUnorderedList : function() { 9517 t.undoManager.add();
9518 return this.editor.dom.getParent(this.editor.selection.getNode(), 'UL'); 9518 t.undoManager.typing = 0;
9519 }, 9519 }
9520 9520
9521 queryStateInsertOrderedList : function() { 9521 return;
9522 return this.editor.dom.getParent(this.editor.selection.getNode(), 'OL'); 9522 }
9523 }, 9523
9524 9524 if (!t.undoManager.typing) {
9525 queryStatemceBlockQuote : function() { 9525 t.undoManager.add();
9526 return !!this.editor.dom.getParent(this.editor.selection.getStart(), function(n) {return n.nodeName === 'BLOCKQUOTE';}); 9526 t.undoManager.typing = 1;
9527 }, 9527 }
9528 9528 });
9529 mceBlockQuote : function() { 9529 }
9530 var t = this, ed = t.editor, s = ed.selection, dom = ed.dom, sb, eb, n, bm, bq, r, bq2, i, nl; 9530 },
9531 9531
9532 function getBQ(e) { 9532 _convertInlineElements : function() {
9533 return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';}); 9533 var t = this, s = t.settings, dom = t.dom, v, e, na, st, sp;
9534 }; 9534
9535 9535 function convert(ed, o) {
9536 // Get start/end block 9536 if (!s.inline_styles)
9537 sb = dom.getParent(s.getStart(), isBlock); 9537 return;
9538 eb = dom.getParent(s.getEnd(), isBlock); 9538
9539 9539 if (o.get) {
9540 // Remove blockquote(s) 9540 each(t.dom.select('table,u,strike', o.node), function(n) {
9541 if (bq = getBQ(sb)) { 9541 switch (n.nodeName) {
9542 if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR')) 9542 case 'TABLE':
9543 bm = s.getBookmark(); 9543 if (v = dom.getAttrib(n, 'height')) {
9544 9544 dom.setStyle(n, 'height', v);
9545 // Move all elements after the end block into new bq 9545 dom.setAttrib(n, 'height', '');
9546 if (getBQ(eb)) { 9546 }
9547 bq2 = bq.cloneNode(false); 9547 break;
9548 9548
9549 while (n = eb.nextSibling) 9549 case 'U':
9550 bq2.appendChild(n.parentNode.removeChild(n)); 9550 case 'STRIKE':
9551 } 9551 //sp = dom.create('span', {style : dom.getAttrib(n, 'style')});
9552 9552 n.style.textDecoration = n.nodeName == 'U' ? 'underline' : 'line-through';
9553 // Add new bq after 9553 dom.setAttrib(n, 'mce_style', '');
9554 if (bq2) 9554 dom.setAttrib(n, 'mce_name', 'span');
9555 dom.insertAfter(bq2, bq); 9555 break;
9556 9556 }
9557 // Move all selected blocks after the current bq 9557 });
9558 nl = t._getSelectedBlocks(sb, eb); 9558 } else if (o.set) {
9559 for (i = nl.length - 1; i >= 0; i--) { 9559 each(t.dom.select('table,span', o.node).reverse(), function(n) {
9560 dom.insertAfter(nl[i], bq); 9560 if (n.nodeName == 'TABLE') {
9561 } 9561 if (v = dom.getStyle(n, 'height'))
9562 9562 dom.setAttrib(n, 'height', v.replace(/[^0-9%]+/g, ''));
9563 // Empty bq, then remove it 9563 } else {
9564 if (/^\s*$/.test(bq.innerHTML)) 9564 // Convert spans to elements
9565 dom.remove(bq, 1); // Keep children so boomark restoration works correctly 9565 if (n.style.textDecoration == 'underline')
9566 9566 na = 'u';
9567 // Empty bq, then remote it 9567 else if (n.style.textDecoration == 'line-through')
9568 if (bq2 && /^\s*$/.test(bq2.innerHTML)) 9568 na = 'strike';
9569 dom.remove(bq2, 1); // Keep children so boomark restoration works correctly 9569 else
9570 9570 na = '';
9571 if (!bm) { 9571
9572 // Move caret inside empty block element 9572 if (na) {
9573 if (!isIE) { 9573 n.style.textDecoration = '';
9574 r = ed.getDoc().createRange(); 9574 dom.setAttrib(n, 'mce_style', '');
9575 r.setStart(sb, 0); 9575
9576 r.setEnd(sb, 0); 9576 e = dom.create(na, {
9577 s.setRng(r); 9577 style : dom.getAttrib(n, 'style')
9578 } else { 9578 });
9579 s.select(sb); 9579
9580 s.collapse(0); 9580 dom.replace(e, n, 1);
9581 9581 }
9582 // IE misses the empty block some times element so we must move back the caret 9582 }
9583 if (dom.getParent(s.getStart(), isBlock) != sb) { 9583 });
9584 r = s.getRng(); 9584 }
9585 r.move('character', -1); 9585 };
9586 r.select(); 9586
9587 } 9587 t.onPreProcess.add(convert);
9588 } 9588
9589 } else 9589 if (!s.cleanup_on_startup) {
9590 t.editor.selection.moveToBookmark(bm); 9590 t.onSetContent.add(function(ed, o) {
9591 9591 if (o.initial)
9592 return; 9592 convert(t, {node : t.getBody(), set : 1});
9593 } 9593 });
9594 9594 }
9595 // Since IE can start with a totally empty document we need to add the first bq and paragraph 9595 },
9596 if (isIE && !sb && !eb) { 9596
9597 t.editor.getDoc().execCommand('Indent'); 9597 _convertFonts : function() {
9598 n = getBQ(s.getNode()); 9598 var t = this, s = t.settings, dom = t.dom, fz, fzn, sl, cl;
9599 n.style.margin = n.dir = ''; // IE adds margin and dir to bq 9599
9600 return; 9600 // No need
9601 } 9601 if (!s.inline_styles)
9602 9602 return;
9603 if (!sb || !eb) 9603
9604 return; 9604 // Font pt values and font size names
9605 9605 fz = [8, 10, 12, 14, 18, 24, 36];
9606 // If empty paragraph node then do not use bookmark 9606 fzn = ['xx-small', 'x-small','small','medium','large','x-large', 'xx-large'];
9607 if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR')) 9607
9608 bm = s.getBookmark(); 9608 if (sl = s.font_size_style_values)
9609 9609 sl = explode(sl);
9610 // Move selected block elements into a bq 9610
9611 each(t._getSelectedBlocks(getBQ(s.getStart()), getBQ(s.getEnd())), function(e) { 9611 if (cl = s.font_size_classes)
9612 // Found existing BQ add to this one 9612 cl = explode(cl);
9613 if (e.nodeName == 'BLOCKQUOTE' && !bq) { 9613
9614 bq = e; 9614 function process(no) {
9615 return; 9615 var n, sp, nl, x;
9616 } 9616
9617 9617 // Keep unit tests happy
9618 // No BQ found, create one 9618 if (!s.inline_styles)
9619 if (!bq) { 9619 return;
9620 bq = dom.create('blockquote'); 9620
9621 e.parentNode.insertBefore(bq, e); 9621 nl = t.dom.select('font', no);
9622 } 9622 for (x = nl.length - 1; x >= 0; x--) {
9623 9623 n = nl[x];
9624 // Add children from existing BQ 9624
9625 if (e.nodeName == 'BLOCKQUOTE' && bq) { 9625 sp = dom.create('span', {
9626 n = e.firstChild; 9626 style : dom.getAttrib(n, 'style'),
9627 9627 'class' : dom.getAttrib(n, 'class')
9628 while (n) { 9628 });
9629 bq.appendChild(n.cloneNode(true)); 9629
9630 n = n.nextSibling; 9630 dom.setStyles(sp, {
9631 } 9631 fontFamily : dom.getAttrib(n, 'face'),
9632 9632 color : dom.getAttrib(n, 'color'),
9633 dom.remove(e); 9633 backgroundColor : n.style.backgroundColor
9634 return; 9634 });
9635 } 9635
9636 9636 if (n.size) {
9637 // Add non BQ element to BQ 9637 if (sl)
9638 bq.appendChild(dom.remove(e)); 9638 dom.setStyle(sp, 'fontSize', sl[parseInt(n.size) - 1]);
9639 }); 9639 else
9640 9640 dom.setAttrib(sp, 'class', cl[parseInt(n.size) - 1]);
9641 if (!bm) { 9641 }
9642 // Move caret inside empty block element 9642
9643 if (!isIE) { 9643 dom.setAttrib(sp, 'mce_style', '');
9644 r = ed.getDoc().createRange(); 9644 dom.replace(sp, n, 1);
9645 r.setStart(sb, 0); 9645 }
9646 r.setEnd(sb, 0); 9646 };
9647 s.setRng(r); 9647
9648 } else { 9648 // Run on cleanup
9649 s.select(sb); 9649 t.onPreProcess.add(function(ed, o) {
9650 s.collapse(1); 9650 if (o.get)
9651 } 9651 process(o.node);
9652 } else 9652 });
9653 s.moveToBookmark(bm); 9653
9654 }, 9654 t.onSetContent.add(function(ed, o) {
9655 9655 if (o.initial)
9656 _applyInlineStyle : function(na, at, op) { 9656 process(o.node);
9657 var t = this, ed = t.editor, dom = ed.dom, bm, lo = {}, kh; 9657 });
9658 9658 },
9659 na = na.toUpperCase(); 9659
9660 9660 _isHidden : function() {
9661 if (op && op.check_classes && at['class']) 9661 var s;
9662 op.check_classes.push(at['class']); 9662
9663 9663 if (!isGecko)
9664 function replaceFonts() { 9664 return 0;
9665 var bm; 9665
9666 9666 // Weird, wheres that cursor selection?
9667 each(dom.select(tinymce.isWebKit && !tinymce.isAir ? 'span' : 'font'), function(n) { 9667 s = this.selection.getSel();
9668 if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') { 9668 return (!s || !s.rangeCount || s.rangeCount == 0);
9669 if (!bm) 9669 },
9670 bm = ed.selection.getBookmark(); 9670
9671 9671 // Fix for bug #1867292
9672 at._mce_new = '1'; 9672 _fixNesting : function(s) {
9673 dom.replace(dom.create(na, at), n, 1); 9673 var d = [], i;
9674 } 9674
9675 }); 9675 s = s.replace(/<(\/)?([^\s>]+)[^>]*?>/g, function(a, b, c) {
9676 9676 var e;
9677 // Remove redundant elements 9677
9678 each(dom.select(na), function(n) { 9678 // Handle end element
9679 if (n.getAttribute('_mce_new')) { 9679 if (b === '/') {
9680 function removeStyle(n) { 9680 if (!d.length)
9681 if (n.nodeType == 1) { 9681 return '';
9682 each(at.style, function(v, k) { 9682
9683 dom.setStyle(n, k, ''); 9683 if (c !== d[d.length - 1].tag) {
9684 }); 9684 for (i=d.length - 1; i>=0; i--) {
9685 9685 if (d[i].tag === c) {
9686 // Remove spans with the same class or marked classes 9686 d[i].close = 1;
9687 if (at['class'] && n.className && op) { 9687 break;
9688 each(op.check_classes, function(c) { 9688 }
9689 if (dom.hasClass(n, c)) 9689 }
9690 dom.removeClass(n, c); 9690
9691 }); 9691 return '';
9692 } 9692 } else {
9693 } 9693 d.pop();
9694 }; 9694
9695 9695 if (d.length && d[d.length - 1].close) {
9696 // Remove specified style information from child elements 9696 a = a + '</' + d[d.length - 1].tag + '>';
9697 each(dom.select(na, n), removeStyle); 9697 d.pop();
9698 9698 }
9699 // Remove the specified style information on parent if current node is only child (IE) 9699 }
9700 if (n.parentNode && n.parentNode.nodeType == 1 && n.parentNode.childNodes.length == 1) 9700 } else {
9701 removeStyle(n.parentNode); 9701 // Ignore these
9702 9702 if (/^(br|hr|input|meta|img|link|param)$/i.test(c))
9703 // Remove the child elements style info if a parent already has it 9703 return a;
9704 dom.getParent(n.parentNode, function(pn) { 9704
9705 if (pn.nodeType == 1) { 9705 // Ignore closed ones
9706 if (at.style) { 9706 if (/\/>$/.test(a))
9707 each(at.style, function(v, k) { 9707 return a;
9708 var sv; 9708
9709 9709 d.push({tag : c}); // Push start element
9710 if (!lo[k] && (sv = dom.getStyle(pn, k))) { 9710 }
9711 if (sv === v) 9711
9712 dom.setStyle(n, k, ''); 9712 return a;
9713 9713 });
9714 lo[k] = 1; 9714
9715 } 9715 // End all open tags
9716 }); 9716 for (i=d.length - 1; i>=0; i--)
9717 } 9717 s += '</' + d[i].tag + '>';
9718 9718
9719 // Remove spans with the same class or marked classes 9719 return s;
9720 if (at['class'] && pn.className && op) { 9720 }
9721 each(op.check_classes, function(c) { 9721 });
9722 if (dom.hasClass(pn, c)) 9722})(tinymce);
9723 dom.removeClass(n, c); 9723(function(tinymce) {
9724 }); 9724 var each = tinymce.each, isIE = tinymce.isIE, isGecko = tinymce.isGecko, isOpera = tinymce.isOpera, isWebKit = tinymce.isWebKit;
9725 } 9725
9726 } 9726 tinymce.create('tinymce.EditorCommands', {
9727 9727 EditorCommands : function(ed) {
9728 return false; 9728 this.editor = ed;
9729 }); 9729 },
9730 9730
9731 n.removeAttribute('_mce_new'); 9731 execCommand : function(cmd, ui, val) {
9732 } 9732 var t = this, ed = t.editor, f;
9733 }); 9733
9734 9734 switch (cmd) {
9735 // Remove empty span elements 9735 // Ignore these
9736 each(dom.select(na).reverse(), function(n) { 9736 case 'mceResetDesignMode':
9737 var c = 0; 9737 case 'mceBeginUndoLevel':
9738 9738 return true;
9739 // Check if there is any attributes 9739
9740 each(dom.getAttribs(n), function(an) { 9740 // Ignore these
9741 if (an.nodeName.substring(0, 1) != '_' && dom.getAttrib(n, an.nodeName) != '') { 9741 case 'unlink':
9742 //console.log(dom.getOuterHTML(n), dom.getAttrib(n, an.nodeName)); 9742 t.UnLink();
9743 c++; 9743 return true;
9744 } 9744
9745 }); 9745 // Bundle these together
9746 9746 case 'JustifyLeft':
9747 // No attributes then remove the element and keep the children 9747 case 'JustifyCenter':
9748 if (c == 0) 9748 case 'JustifyRight':
9749 dom.remove(n, 1); 9749 case 'JustifyFull':
9750 }); 9750 t.mceJustify(cmd, cmd.substring(7).toLowerCase());
9751 9751 return true;
9752 ed.selection.moveToBookmark(bm); 9752
9753 9753 default:
9754 return !!bm; 9754 f = this[cmd];
9755 }; 9755
9756 9756 if (f) {
9757 // Create inline elements 9757 f.call(this, ui, val);
9758 ed.focus(); 9758 return true;
9759 ed.getDoc().execCommand('FontName', false, 'mceinline'); 9759 }
9760 replaceFonts(); 9760 }
9761 9761
9762 if (kh = t._applyInlineStyle.keyhandler) { 9762 return false;
9763 ed.onKeyUp.remove(kh); 9763 },
9764 ed.onKeyPress.remove(kh); 9764
9765 ed.onKeyDown.remove(kh); 9765 Indent : function() {
9766 ed.onSetContent.remove(t._applyInlineStyle.chandler); 9766 var ed = this.editor, d = ed.dom, s = ed.selection, e, iv, iu;
9767 } 9767
9768 9768 // Setup indent level
9769 if (ed.selection.isCollapsed()) { 9769 iv = ed.settings.indentation;
9770 // Start collecting styles 9770 iu = /[a-z%]+$/i.exec(iv);
9771 t._pendingStyles = tinymce.extend(t._pendingStyles || {}, at.style); 9771 iv = parseInt(iv);
9772 9772
9773 t._applyInlineStyle.chandler = ed.onSetContent.add(function() { 9773 if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) {
9774 delete t._pendingStyles; 9774 each(s.getSelectedBlocks(), function(e) {
9775 }); 9775 d.setStyle(e, 'paddingLeft', (parseInt(e.style.paddingLeft || 0) + iv) + iu);
9776 9776 });
9777 t._applyInlineStyle.keyhandler = kh = function(e) { 9777
9778 // Use pending styles 9778 return;
9779 if (t._pendingStyles) { 9779 }
9780 at.style = t._pendingStyles; 9780
9781 delete t._pendingStyles; 9781 ed.getDoc().execCommand('Indent', false, null);
9782 } 9782
9783 9783 if (isIE) {
9784 if (replaceFonts()) { 9784 d.getParent(s.getNode(), function(n) {
9785 ed.onKeyDown.remove(t._applyInlineStyle.keyhandler); 9785 if (n.nodeName == 'BLOCKQUOTE') {
9786 ed.onKeyPress.remove(t._applyInlineStyle.keyhandler); 9786 n.dir = n.style.cssText = '';
9787 } 9787 }
9788 9788 });
9789 if (e.type == 'keyup') 9789 }
9790 ed.onKeyUp.remove(t._applyInlineStyle.keyhandler); 9790 },
9791 }; 9791
9792 9792 Outdent : function() {
9793 ed.onKeyDown.add(kh); 9793 var ed = this.editor, d = ed.dom, s = ed.selection, e, v, iv, iu;
9794 ed.onKeyPress.add(kh); 9794
9795 ed.onKeyUp.add(kh); 9795 // Setup indent level
9796 } else 9796 iv = ed.settings.indentation;
9797 t._pendingStyles = 0; 9797 iu = /[a-z%]+$/i.exec(iv);
9798 }, 9798 iv = parseInt(iv);
9799 9799
9800/* 9800 if (ed.settings.inline_styles && (!this.queryStateInsertUnorderedList() && !this.queryStateInsertOrderedList())) {
9801 _mceBlockQuote : function() { 9801 each(s.getSelectedBlocks(), function(e) {
9802 var t = this, s = t.editor.selection, b = s.getBookmark(), bq, dom = t.editor.dom; 9802 v = Math.max(0, parseInt(e.style.paddingLeft || 0) - iv);
9803 9803 d.setStyle(e, 'paddingLeft', v ? v + iu : '');
9804 function findBQ(e) { 9804 });
9805 return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';}); 9805
9806 }; 9806 return;
9807 9807 }
9808 // Remove blockquote(s) 9808
9809 if (findBQ(s.getStart())) { 9809 ed.getDoc().execCommand('Outdent', false, null);
9810 each(t._getSelectedBlocks(findBQ(s.getStart()), findBQ(s.getEnd())), function(e) { 9810 },
9811 // Found BQ lets remove it 9811
9812 if (e.nodeName == 'BLOCKQUOTE') 9812/*
9813 dom.remove(e, 1); 9813 mceSetAttribute : function(u, v) {
9814 }); 9814 var ed = this.editor, d = ed.dom, e;
9815 9815
9816 t.editor.selection.moveToBookmark(b); 9816 if (e = d.getParent(ed.selection.getNode(), d.isBlock))
9817 return; 9817 d.setAttrib(e, v.name, v.value);
9818 } 9818 },
9819 9819*/
9820 each(t._getSelectedBlocks(findBQ(s.getStart()), findBQ(s.getEnd())), function(e) { 9820 mceSetContent : function(u, v) {
9821 var n; 9821 this.editor.setContent(v);
9822 9822 },
9823 // Found existing BQ add to this one 9823
9824 if (e.nodeName == 'BLOCKQUOTE' && !bq) { 9824 mceToggleVisualAid : function() {
9825 bq = e; 9825 var ed = this.editor;
9826 return; 9826
9827 } 9827 ed.hasVisual = !ed.hasVisual;
9828 9828 ed.addVisual();
9829 // No BQ found, create one 9829 },
9830 if (!bq) { 9830
9831 bq = dom.create('blockquote'); 9831 mceReplaceContent : function(u, v) {
9832 e.parentNode.insertBefore(bq, e); 9832 var s = this.editor.selection;
9833 } 9833
9834 9834 s.setContent(v.replace(/\{\$selection\}/g, s.getContent({format : 'text'})));
9835 // Add children from existing BQ 9835 },
9836 if (e.nodeName == 'BLOCKQUOTE' && bq) { 9836
9837 n = e.firstChild; 9837 mceInsertLink : function(u, v) {
9838 9838 var ed = this.editor, s = ed.selection, e = ed.dom.getParent(s.getNode(), 'a');
9839 while (n) { 9839
9840 bq.appendChild(n.cloneNode(true)); 9840 if (tinymce.is(v, 'string'))
9841 n = n.nextSibling; 9841 v = {href : v};
9842 } 9842
9843 9843 function set(e) {
9844 dom.remove(e); 9844 each(v, function(v, k) {
9845 9845 ed.dom.setAttrib(e, k, v);
9846 return; 9846 });
9847 } 9847 };
9848 9848
9849 // Add non BQ element to BQ 9849 if (!e) {
9850 bq.appendChild(dom.remove(e)); 9850 ed.execCommand('CreateLink', false, 'javascript:mctmp(0);');
9851 }); 9851 each(ed.dom.select('a[href=javascript:mctmp(0);]'), function(e) {
9852 9852 set(e);
9853 t.editor.selection.moveToBookmark(b); 9853 });
9854 }, 9854 } else {
9855*/ 9855 if (v.href)
9856 _getSelectedBlocks : function(st, en) { 9856 set(e);
9857 var ed = this.editor, dom = ed.dom, s = ed.selection, sb, eb, n, bl = []; 9857 else
9858 9858 ed.dom.remove(e, 1);
9859 sb = dom.getParent(st || s.getStart(), isBlock); 9859 }
9860 eb = dom.getParent(en || s.getEnd(), isBlock); 9860 },
9861 9861
9862 if (sb) 9862 UnLink : function() {
9863 bl.push(sb); 9863 var ed = this.editor, s = ed.selection;
9864 9864
9865 if (sb && eb && sb != eb) { 9865 if (s.isCollapsed())
9866 n = sb; 9866 s.select(s.getNode());
9867 9867
9868 while ((n = n.nextSibling) && n != eb) { 9868 ed.getDoc().execCommand('unlink', false, null);
9869 if (isBlock(n)) 9869 s.collapse(0);
9870 bl.push(n); 9870 },
9871 } 9871
9872 } 9872 FontName : function(u, v) {
9873 9873 var t = this, ed = t.editor, s = ed.selection, e;
9874 if (eb && sb != eb) 9874
9875 bl.push(eb); 9875 if (!v) {
9876 9876 if (s.isCollapsed())
9877 return bl; 9877 s.select(s.getNode());
9878 } 9878 } else {
9879 }); 9879 if (ed.settings.convert_fonts_to_spans)
9880})(); 9880 t._applyInlineStyle('span', {style : {fontFamily : v}});
9881 9881 else
9882 9882 ed.getDoc().execCommand('FontName', false, v);
9883/* file:jscripts/tiny_mce/classes/UndoManager.js */ 9883 }
9884 9884 },
9885tinymce.create('tinymce.UndoManager', { 9885
9886 index : 0, 9886 FontSize : function(u, v) {
9887 data : null, 9887 var ed = this.editor, s = ed.settings, fc, fs;
9888 typing : 0, 9888
9889 9889 // Use style options instead
9890 UndoManager : function(ed) { 9890 if (s.convert_fonts_to_spans && v >= 1 && v <= 7) {
9891 var t = this, Dispatcher = tinymce.util.Dispatcher; 9891 fs = tinymce.explode(s.font_size_style_values);
9892 9892 fc = tinymce.explode(s.font_size_classes);
9893 t.editor = ed; 9893
9894 t.data = []; 9894 if (fc)
9895 t.onAdd = new Dispatcher(this); 9895 v = fc[v - 1] || v;
9896 t.onUndo = new Dispatcher(this); 9896 else
9897 t.onRedo = new Dispatcher(this); 9897 v = fs[v - 1] || v;
9898 }, 9898 }
9899 9899
9900 add : function(l) { 9900 if (v >= 1 && v <= 7)
9901 var t = this, i, ed = t.editor, b, s = ed.settings, la; 9901 ed.getDoc().execCommand('FontSize', false, v);
9902 9902 else
9903 l = l || {}; 9903 this._applyInlineStyle('span', {style : {fontSize : v}});
9904 l.content = l.content || ed.getContent({format : 'raw', no_events : 1}); 9904 },
9905 9905
9906 // Add undo level if needed 9906 queryCommandValue : function(c) {
9907 l.content = l.content.replace(/^\s*|\s*$/g, ''); 9907 var f = this['queryValue' + c];
9908 la = t.data[t.index > 0 && (t.index == 0 || t.index == t.data.length) ? t.index - 1 : t.index]; 9908
9909 if (!l.initial && la && l.content == la.content) 9909 if (f)
9910 return null; 9910 return f.call(this, c);
9911 9911
9912 // Time to compress 9912 return false;
9913 if (s.custom_undo_redo_levels) { 9913 },
9914 if (t.data.length > s.custom_undo_redo_levels) { 9914
9915 for (i = 0; i < t.data.length - 1; i++) 9915 queryCommandState : function(cmd) {
9916 t.data[i] = t.data[i + 1]; 9916 var f;
9917 9917
9918 t.data.length--; 9918 switch (cmd) {
9919 t.index = t.data.length; 9919 // Bundle these together
9920 } 9920 case 'JustifyLeft':
9921 } 9921 case 'JustifyCenter':
9922 9922 case 'JustifyRight':
9923 if (s.custom_undo_redo_restore_selection && !l.initial) 9923 case 'JustifyFull':
9924 l.bookmark = b = l.bookmark || ed.selection.getBookmark(); 9924 return this.queryStateJustify(cmd, cmd.substring(7).toLowerCase());
9925 9925
9926 if (t.index < t.data.length) 9926 default:
9927 t.index++; 9927 if (f = this['queryState' + cmd])
9928 9928 return f.call(this, cmd);
9929 // Only initial marked undo levels should be allowed as first item 9929 }
9930 // This to workaround a bug with Firefox and the blur event 9930
9931 if (t.data.length === 0 && !l.initial) 9931 return -1;
9932 return null; 9932 },
9933 9933
9934 // Add level 9934 _queryState : function(c) {
9935 t.data.length = t.index + 1; 9935 try {
9936 t.data[t.index++] = l; 9936 return this.editor.getDoc().queryCommandState(c);
9937 9937 } catch (ex) {
9938 if (l.initial) 9938 // Ignore exception
9939 t.index = 0; 9939 }
9940 9940 },
9941 // Set initial bookmark use first real undo level 9941
9942 if (t.data.length == 2 && t.data[0].initial) 9942 _queryVal : function(c) {
9943 t.data[0].bookmark = b; 9943 try {
9944 9944 return this.editor.getDoc().queryCommandValue(c);
9945 t.onAdd.dispatch(t, l); 9945 } catch (ex) {
9946 ed.isNotDirty = 0; 9946 // Ignore exception
9947 9947 }
9948 //console.dir(t.data); 9948 },
9949 9949
9950 return l; 9950 queryValueFontSize : function() {
9951 }, 9951 var ed = this.editor, v = 0, p;
9952 9952
9953 undo : function() { 9953 if (p = ed.dom.getParent(ed.selection.getNode(), 'span'))
9954 var t = this, ed = t.editor, l = l, i; 9954 v = p.style.fontSize;
9955 9955
9956 if (t.typing) { 9956 if (!v && (isOpera || isWebKit)) {
9957 t.add(); 9957 if (p = ed.dom.getParent(ed.selection.getNode(), 'font'))
9958 t.typing = 0; 9958 v = p.size;
9959 } 9959
9960 9960 return v;
9961 if (t.index > 0) { 9961 }
9962 // If undo on last index then take snapshot 9962
9963 if (t.index == t.data.length && t.index > 1) { 9963 return v || this._queryVal('FontSize');
9964 i = t.index; 9964 },
9965 t.typing = 0; 9965
9966 9966 queryValueFontName : function() {
9967 if (!t.add()) 9967 var ed = this.editor, v = 0, p;
9968 t.index = i; 9968
9969 9969 if (p = ed.dom.getParent(ed.selection.getNode(), 'font'))
9970 --t.index; 9970 v = p.face;
9971 } 9971
9972 9972 if (p = ed.dom.getParent(ed.selection.getNode(), 'span'))
9973 l = t.data[--t.index]; 9973 v = p.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();
9974 ed.setContent(l.content, {format : 'raw'}); 9974
9975 ed.selection.moveToBookmark(l.bookmark); 9975 if (!v)
9976 9976 v = this._queryVal('FontName');
9977 t.onUndo.dispatch(t, l); 9977
9978 } 9978 return v;
9979 9979 },
9980 return l; 9980
9981 }, 9981 mceJustify : function(c, v) {
9982 9982 var ed = this.editor, se = ed.selection, n = se.getNode(), nn = n.nodeName, bl, nb, dom = ed.dom, rm;
9983 redo : function() { 9983
9984 var t = this, ed = t.editor, l = null; 9984 if (ed.settings.inline_styles && this.queryStateJustify(c, v))
9985 9985 rm = 1;
9986 if (t.index < t.data.length - 1) { 9986
9987 l = t.data[++t.index]; 9987 bl = dom.getParent(n, ed.dom.isBlock);
9988 ed.setContent(l.content, {format : 'raw'}); 9988
9989 ed.selection.moveToBookmark(l.bookmark); 9989 if (nn == 'IMG') {
9990 9990 if (v == 'full')
9991 t.onRedo.dispatch(t, l); 9991 return;
9992 } 9992
9993 9993 if (rm) {
9994 return l; 9994 if (v == 'center')
9995 }, 9995 dom.setStyle(bl || n.parentNode, 'textAlign', '');
9996 9996
9997 clear : function() { 9997 dom.setStyle(n, 'float', '');
9998 var t = this; 9998 this.mceRepaint();
9999 9999 return;
10000 t.data = []; 10000 }
10001 t.index = 0; 10001
10002 t.typing = 0; 10002 if (v == 'center') {
10003 t.add({initial : true}); 10003 // Do not change table elements
10004 }, 10004 if (bl && /^(TD|TH)$/.test(bl.nodeName))
10005 10005 bl = 0;
10006 hasUndo : function() { 10006
10007 return this.index != 0 || this.typing; 10007 if (!bl || bl.childNodes.length > 1) {
10008 }, 10008 nb = dom.create('p');
10009 10009 nb.appendChild(n.cloneNode(false));
10010 hasRedo : function() { 10010
10011 return this.index < this.data.length - 1; 10011 if (bl)
10012 } 10012 dom.insertAfter(nb, bl);
10013 10013 else
10014 }); 10014 dom.insertAfter(nb, n);
10015/* file:jscripts/tiny_mce/classes/ForceBlocks.js */ 10015
10016 10016 dom.remove(n);
10017(function() { 10017 n = nb.firstChild;
10018 // Shorten names 10018 bl = nb;
10019 var Event, isIE, isGecko, isOpera, each, extend; 10019 }
10020 10020
10021 Event = tinymce.dom.Event; 10021 dom.setStyle(bl, 'textAlign', v);
10022 isIE = tinymce.isIE; 10022 dom.setStyle(n, 'float', '');
10023 isGecko = tinymce.isGecko; 10023 } else {
10024 isOpera = tinymce.isOpera; 10024 dom.setStyle(n, 'float', v);
10025 each = tinymce.each; 10025 dom.setStyle(bl || n.parentNode, 'textAlign', '');
10026 extend = tinymce.extend; 10026 }
10027 10027
10028 tinymce.create('tinymce.ForceBlocks', { 10028 this.mceRepaint();
10029 ForceBlocks : function(ed) { 10029 return;
10030 var t = this, s = ed.settings, elm; 10030 }
10031 10031
10032 t.editor = ed; 10032 // Handle the alignment outselfs, less quirks in all browsers
10033 t.dom = ed.dom; 10033 if (ed.settings.inline_styles && ed.settings.forced_root_block) {
10034 elm = (s.forced_root_block || 'p').toLowerCase(); 10034 if (rm)
10035 s.element = elm.toUpperCase(); 10035 v = '';
10036 10036
10037 ed.onPreInit.add(t.setup, t); 10037 each(se.getSelectedBlocks(dom.getParent(se.getStart(), dom.isBlock), dom.getParent(se.getEnd(), dom.isBlock)), function(e) {
10038 10038 dom.setAttrib(e, 'align', '');
10039 t.reOpera = new RegExp('(\\u00a0|&#160;|&nbsp;)<\/' + elm + '>', 'gi'); 10039 dom.setStyle(e, 'textAlign', v == 'full' ? 'justify' : v);
10040 t.rePadd = new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g, elm), 'gi'); 10040 });
10041 t.reNbsp2BR1 = new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi'); 10041
10042 t.reNbsp2BR2 = new RegExp('<p( )([^>]+)>(&nbsp;|&#160;)<\\\/p>|<p>(&nbsp;|&#160;)<\\\/p>'.replace(/p/g, elm), 'gi'); 10042 return;
10043 t.reBR2Nbsp = new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi'); 10043 } else if (!rm)
10044 t.reTrailBr = new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi'); 10044 ed.getDoc().execCommand(c, false, null);
10045 10045
10046 function padd(ed, o) { 10046 if (ed.settings.inline_styles) {
10047 if (isOpera) 10047 if (rm) {
10048 o.content = o.content.replace(t.reOpera, '</' + elm + '>'); 10048 dom.getParent(ed.selection.getNode(), function(n) {
10049 10049 if (n.style && n.style.textAlign)
10050 o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0</' + elm + '>'); 10050 dom.setStyle(n, 'textAlign', '');
10051 10051 });
10052 if (!isIE && !isOpera && o.set) { 10052
10053 // Use &nbsp; instead of BR in padded paragraphs 10053 return;
10054 o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2><br /></' + elm + '>'); 10054 }
10055 o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2><br /></' + elm + '>'); 10055
10056 } else { 10056 each(dom.select('*'), function(n) {
10057 o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0</' + elm + '>'); 10057 var v = n.align;
10058 o.content = o.content.replace(t.reTrailBr, '</' + elm + '>'); 10058
10059 } 10059 if (v) {
10060 }; 10060 if (v == 'full')
10061 10061 v = 'justify';
10062 ed.onBeforeSetContent.add(padd); 10062
10063 ed.onPostProcess.add(padd); 10063 dom.setStyle(n, 'textAlign', v);
10064 10064 dom.setAttrib(n, 'align', '');
10065 if (s.forced_root_block) { 10065 }
10066 ed.onInit.add(t.forceRoots, t); 10066 });
10067 ed.onSetContent.add(t.forceRoots, t); 10067 }
10068 ed.onBeforeGetContent.add(t.forceRoots, t); 10068 },
10069 } 10069
10070 }, 10070 mceSetCSSClass : function(u, v) {
10071 10071 this.mceSetStyleInfo(0, {command : 'setattrib', name : 'class', value : v});
10072 setup : function() { 10072 },
10073 var t = this, ed = t.editor, s = ed.settings; 10073
10074 10074 getSelectedElement : function() {
10075 // Force root blocks when typing and when getting output 10075 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;
10076 if (s.forced_root_block) { 10076
10077 ed.onKeyUp.add(t.forceRoots, t); 10077 if (se.isCollapsed() || r.item)
10078 ed.onPreProcess.add(t.forceRoots, t); 10078 return se.getNode();
10079 } 10079
10080 10080 // Setup regexp
10081 if (s.force_br_newlines) { 10081 re = ed.settings.merge_styles_invalid_parents;
10082 // Force IE to produce BRs on enter 10082 if (tinymce.is(re, 'string'))
10083 if (isIE) { 10083 re = new RegExp(re, 'i');
10084 ed.onKeyPress.add(function(ed, e) { 10084
10085 var n, s = ed.selection; 10085 if (isIE) {
10086 10086 r1 = r.duplicate();
10087 if (e.keyCode == 13 && s.getNode().nodeName != 'LI') { 10087 r1.collapse(true);
10088 s.setContent('<br id="__" /> ', {format : 'raw'}); 10088 sc = r1.parentElement();
10089 n = ed.dom.get('__'); 10089
10090 n.removeAttribute('id'); 10090 r2 = r.duplicate();
10091 s.select(n); 10091 r2.collapse(false);
10092 s.collapse(); 10092 ec = r2.parentElement();
10093 return Event.cancel(e); 10093
10094 } 10094 if (sc != ec) {
10095 }); 10095 r1.move('character', 1);
10096 } 10096 sc = r1.parentElement();
10097 10097 }
10098 return; 10098
10099 } 10099 if (sc == ec) {
10100 10100 r1 = r.duplicate();
10101 if (!isIE && s.force_p_newlines) { 10101 r1.moveToElementText(sc);
10102/* ed.onPreProcess.add(function(ed, o) { 10102
10103 each(ed.dom.select('br', o.node), function(n) { 10103 if (r1.compareEndPoints('StartToStart', r) == 0 && r1.compareEndPoints('EndToEnd', r) == 0)
10104 var p = n.parentNode; 10104 return re && re.test(sc.nodeName) ? null : sc;
10105 10105 }
10106 // Replace <p><br /></p> with <p>&nbsp;</p> 10106 } else {
10107 if (p && p.nodeName == 'p' && (p.childNodes.length == 1 || p.lastChild == n)) { 10107 function getParent(n) {
10108 p.replaceChild(ed.getDoc().createTextNode('\u00a0'), n); 10108 return dom.getParent(n, '*');
10109 } 10109 };
10110 }); 10110
10111 });*/ 10111 sc = r.startContainer;
10112 10112 ec = r.endContainer;
10113 ed.onKeyPress.add(function(ed, e) { 10113 so = r.startOffset;
10114 if (e.keyCode == 13 && !e.shiftKey) { 10114 eo = r.endOffset;
10115 if (!t.insertPara(e)) 10115
10116 Event.cancel(e); 10116 if (!r.collapsed) {
10117 } 10117 if (sc == ec) {
10118 }); 10118 if (so - eo < 2) {
10119 10119 if (sc.hasChildNodes()) {
10120 if (isGecko) { 10120 sp = sc.childNodes[so];
10121 ed.onKeyDown.add(function(ed, e) { 10121 return re && re.test(sp.nodeName) ? null : sp;
10122 if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) 10122 }
10123 t.backspaceDelete(e, e.keyCode == 8); 10123 }
10124 }); 10124 }
10125 } 10125 }
10126 } 10126
10127 10127 if (sc.nodeType != 3 || ec.nodeType != 3)
10128 function ren(rn, na) { 10128 return null;
10129 var ne = ed.dom.create(na); 10129
10130 10130 if (so == 0) {
10131 each(rn.attributes, function(a) { 10131 sp = getParent(sc);
10132 if (a.specified && a.nodeValue) 10132
10133 ne.setAttribute(a.nodeName.toLowerCase(), a.nodeValue); 10133 if (sp && sp.firstChild != sc)
10134 }); 10134 sp = null;
10135 10135 }
10136 each(rn.childNodes, function(n) { 10136
10137 ne.appendChild(n.cloneNode(true)); 10137 if (so == sc.nodeValue.length) {
10138 }); 10138 e = sc.nextSibling;
10139 10139
10140 rn.parentNode.replaceChild(ne, rn); 10140 if (e && e.nodeType == 1)
10141 10141 sp = sc.nextSibling;
10142 return ne; 10142 }
10143 }; 10143
10144 10144 if (eo == 0) {
10145 // Replaces IE:s auto generated paragraphs with the specified element name 10145 e = ec.previousSibling;
10146 if (isIE && s.element != 'P') { 10146
10147 ed.onKeyPress.add(function(ed, e) { 10147 if (e && e.nodeType == 1)
10148 t.lastElm = ed.selection.getNode().nodeName; 10148 ep = e;
10149 }); 10149 }
10150 10150
10151 ed.onKeyUp.add(function(ed, e) { 10151 if (eo == ec.nodeValue.length) {
10152 var bl, sel = ed.selection, n = sel.getNode(), b = ed.getBody(); 10152 ep = getParent(ec);
10153 10153
10154 if (b.childNodes.length === 1 && n.nodeName == 'P') { 10154 if (ep && ep.lastChild != ec)
10155 n = ren(n, s.element); 10155 ep = null;
10156 sel.select(n); 10156 }
10157 sel.collapse(); 10157
10158 ed.nodeChanged(); 10158 // Same element
10159 } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') { 10159 if (sp == ep)
10160 bl = ed.dom.getParent(n, 'P'); 10160 return re && sp && re.test(sp.nodeName) ? null : sp;
10161 10161 }
10162 if (bl) { 10162
10163 ren(bl, s.element); 10163 return null;
10164 ed.nodeChanged(); 10164 },
10165 } 10165
10166 } 10166 mceSetStyleInfo : function(u, v) {
10167 }); 10167 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;
10168 } 10168
10169 }, 10169 function set(n, e) {
10170 10170 if (n.nodeType == 1) {
10171 find : function(n, t, s) { 10171 switch (v.command) {
10172 var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, false), c = -1; 10172 case 'setattrib':
10173 10173 return dom.setAttrib(n, v.name, v.value);
10174 while (n = w.nextNode()) { 10174
10175 c++; 10175 case 'setstyle':
10176 10176 return dom.setStyle(n, v.name, v.value);
10177 // Index by node 10177
10178 if (t == 0 && n == s) 10178 case 'removeformat':
10179 return c; 10179 return dom.setAttrib(n, 'class', '');
10180 10180 }
10181 // Node by index 10181 }
10182 if (t == 1 && c == s) 10182 };
10183 return n; 10183
10184 } 10184 // Setup regexp
10185 10185 re = ed.settings.merge_styles_invalid_parents;
10186 return -1; 10186 if (tinymce.is(re, 'string'))
10187 }, 10187 re = new RegExp(re, 'i');
10188 10188
10189 forceRoots : function(ed, e) { 10189 // Set style info on selected element
10190 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; 10190 if ((e = t.getSelectedElement()) && !ed.settings.force_span_wrappers)
10191 var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid; 10191 set(e, 1);
10192 10192 else {
10193 // Fix for bug #1863847 10193 // Generate wrappers and set styles on them
10194 //if (e && e.keyCode == 13) 10194 d.execCommand('FontName', false, '__');
10195 // return true; 10195 each(dom.select('span,font'), function(n) {
10196 10196 var sp, e;
10197 // Wrap non blocks into blocks 10197
10198 for (i = nl.length - 1; i >= 0; i--) { 10198 if (dom.getAttrib(n, 'face') == '__' || n.style.fontFamily === '__') {
10199 nx = nl[i]; 10199 sp = dom.create(nn, {mce_new : '1'});
10200 10200
10201 // Is text or non block element 10201 set(sp);
10202 if (nx.nodeType == 3 || (!t.dom.isBlock(nx) && nx.nodeType != 8)) { 10202
10203 if (!bl) { 10203 each (n.childNodes, function(n) {
10204 // Create new block but ignore whitespace 10204 sp.appendChild(n.cloneNode(true));
10205 if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) { 10205 });
10206 // Store selection 10206
10207 if (si == -2 && r) { 10207 dom.replace(sp, n);
10208 if (!isIE) { 10208 }
10209 // If selection is element then mark it 10209 });
10210 if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) { 10210 }
10211 // Save the id of the selected element 10211
10212 eid = n.getAttribute("id"); 10212 // Remove wrappers inside new ones
10213 n.setAttribute("id", "__mce"); 10213 each(dom.select(nn).reverse(), function(n) {
10214 } else { 10214 var p = n.parentNode;
10215 // If element is inside body, might not be the case in contentEdiable mode 10215
10216 if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) { 10216 // Check if it's an old span in a new wrapper
10217 so = r.startOffset; 10217 if (!dom.getAttrib(n, 'mce_new')) {
10218 eo = r.endOffset; 10218 // Find new wrapper
10219 si = t.find(b, 0, r.startContainer); 10219 p = dom.getParent(n, '*[mce_new]');
10220 ei = t.find(b, 0, r.endContainer); 10220
10221 } 10221 if (p)
10222 } 10222 dom.remove(n, 1);
10223 } else { 10223 }
10224 tr = d.body.createTextRange(); 10224 });
10225 tr.moveToElementText(b); 10225
10226 tr.collapse(1); 10226 // Merge wrappers with parent wrappers
10227 bp = tr.move('character', c) * -1; 10227 each(dom.select(nn).reverse(), function(n) {
10228 10228 var p = n.parentNode;
10229 tr = r.duplicate(); 10229
10230 tr.collapse(1); 10230 if (!p || !dom.getAttrib(n, 'mce_new'))
10231 sp = tr.move('character', c) * -1; 10231 return;
10232 10232
10233 tr = r.duplicate(); 10233 if (ed.settings.force_span_wrappers && p.nodeName != 'SPAN')
10234 tr.collapse(0); 10234 return;
10235 le = (tr.move('character', c) * -1) - sp; 10235
10236 10236 // Has parent of the same type and only child
10237 si = sp - bp; 10237 if (p.nodeName == nn.toUpperCase() && p.childNodes.length == 1)
10238 ei = le; 10238 return dom.remove(p, 1);
10239 } 10239
10240 } 10240 // Has parent that is more suitable to have the class and only child
10241 10241 if (n.nodeType == 1 && (!re || !re.test(p.nodeName)) && p.childNodes.length == 1) {
10242 bl = ed.dom.create(ed.settings.forced_root_block); 10242 set(p); // Set style info on parent instead
10243 bl.appendChild(nx.cloneNode(1)); 10243 dom.setAttrib(n, 'class', '');
10244 nx.parentNode.replaceChild(bl, nx); 10244 }
10245 } 10245 });
10246 } else { 10246
10247 if (bl.hasChildNodes()) 10247 // Remove empty wrappers
10248 bl.insertBefore(nx, bl.firstChild); 10248 each(dom.select(nn).reverse(), function(n) {
10249 else 10249 if (dom.getAttrib(n, 'mce_new') || (dom.getAttribs(n).length <= 1 && n.className === '')) {
10250 bl.appendChild(nx); 10250 if (!dom.getAttrib(n, 'class') && !dom.getAttrib(n, 'style'))
10251 } 10251 return dom.remove(n, 1);
10252 } else 10252
10253 bl = null; // Time to create new block 10253 dom.setAttrib(n, 'mce_new', ''); // Remove mce_new marker
10254 } 10254 }
10255 10255 });
10256 // Restore selection 10256
10257 if (si != -2) { 10257 s.moveToBookmark(b);
10258 if (!isIE) { 10258 },
10259 bl = b.getElementsByTagName(ed.settings.element)[0]; 10259
10260 r = d.createRange(); 10260 queryStateJustify : function(c, v) {
10261 10261 var ed = this.editor, n = ed.selection.getNode(), dom = ed.dom;
10262 // Select last location or generated block 10262
10263 if (si != -1) 10263 if (n && n.nodeName == 'IMG') {
10264 r.setStart(t.find(b, 1, si), so); 10264 if (dom.getStyle(n, 'float') == v)
10265 else 10265 return 1;
10266 r.setStart(bl, 0); 10266
10267 10267 return n.parentNode.style.textAlign == v;
10268 // Select last location or generated block 10268 }
10269 if (ei != -1) 10269
10270 r.setEnd(t.find(b, 1, ei), eo); 10270 n = dom.getParent(ed.selection.getStart(), function(n) {
10271 else 10271 return n.nodeType == 1 && n.style.textAlign;
10272 r.setEnd(bl, 0); 10272 });
10273 10273
10274 if (s) { 10274 if (v == 'full')
10275 s.removeAllRanges(); 10275 v = 'justify';
10276 s.addRange(r); 10276
10277 } 10277 if (ed.settings.inline_styles)
10278 } else { 10278 return (n && n.style.textAlign == v);
10279 try { 10279
10280 r = s.createRange(); 10280 return this._queryState(c);
10281 r.moveToElementText(b); 10281 },
10282 r.collapse(1); 10282
10283 r.moveStart('character', si); 10283 ForeColor : function(ui, v) {
10284 r.moveEnd('character', ei); 10284 var ed = this.editor;
10285 r.select(); 10285
10286 } catch (ex) { 10286 if (ed.settings.convert_fonts_to_spans) {
10287 // Ignore 10287 this._applyInlineStyle('span', {style : {color : v}});
10288 } 10288 return;
10289 } 10289 } else
10290 } else if (!isIE && (n = ed.dom.get('__mce'))) { 10290 ed.getDoc().execCommand('ForeColor', false, v);
10291 // Restore the id of the selected element 10291 },
10292 if (eid) 10292
10293 n.setAttribute('id', eid); 10293 HiliteColor : function(ui, val) {
10294 else 10294 var t = this, ed = t.editor, d = ed.getDoc();
10295 n.removeAttribute('id'); 10295
10296 10296 if (ed.settings.convert_fonts_to_spans) {
10297 // Move caret before selected element 10297 this._applyInlineStyle('span', {style : {backgroundColor : val}});
10298 r = d.createRange(); 10298 return;
10299 r.setStartBefore(n); 10299 }
10300 r.setEndBefore(n); 10300
10301 se.setRng(r); 10301 function set(s) {
10302 } 10302 if (!isGecko)
10303 }, 10303 return;
10304 10304
10305 getParentBlock : function(n) { 10305 try {
10306 var d = this.dom; 10306 // Try new Gecko method
10307 10307 d.execCommand("styleWithCSS", 0, s);
10308 return d.getParent(n, d.isBlock); 10308 } catch (ex) {
10309 }, 10309 // Use old
10310 10310 d.execCommand("useCSS", 0, !s);
10311 insertPara : function(e) { 10311 }
10312 var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body; 10312 };
10313 var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car; 10313
10314 10314 if (isGecko || isOpera) {
10315 function isEmpty(n) { 10315 set(true);
10316 n = n.innerHTML; 10316 d.execCommand('hilitecolor', false, val);
10317 n = n.replace(/<(img|hr|table)/gi, '-'); // Keep these convert them to - chars 10317 set(false);
10318 n = n.replace(/<[^>]+>/g, ''); // Remove all tags 10318 } else
10319 10319 d.execCommand('BackColor', false, val);
10320 return n.replace(/[ \t\r\n]+/g, '') == ''; 10320 },
10321 }; 10321
10322 10322 FormatBlock : function(ui, val) {
10323 // If root blocks are forced then use Operas default behavior since it's really good 10323 var t = this, ed = t.editor, s = ed.selection, dom = ed.dom, bl, nb, b;
10324// Removed due to bug: #1853816 10324
10325// if (se.forced_root_block && isOpera) 10325 function isBlock(n) {
10326// return true; 10326 return /^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName);
10327 10327 };
10328 // Setup before range 10328
10329 rb = d.createRange(); 10329 bl = dom.getParent(s.getNode(), function(n) {
10330 10330 return isBlock(n);
10331 // If is before the first block element and in body, then move it into first block element 10331 });
10332 rb.setStart(s.anchorNode, s.anchorOffset); 10332
10333 rb.collapse(true); 10333 // IE has an issue where it removes the parent div if you change format on the paragrah in <div><p>Content</p></div>
10334 10334 // FF and Opera doesn't change parent DIV elements if you switch format
10335 // Setup after range 10335 if (bl) {
10336 ra = d.createRange(); 10336 if ((isIE && isBlock(bl.parentNode)) || bl.nodeName == 'DIV') {
10337 10337 // Rename block element
10338 // If is before the first block element and in body, then move it into first block element 10338 nb = ed.dom.create(val);
10339 ra.setStart(s.focusNode, s.focusOffset); 10339
10340 ra.collapse(true); 10340 each(dom.getAttribs(bl), function(v) {
10341 10341 dom.setAttrib(nb, v.nodeName, dom.getAttrib(bl, v.nodeName));
10342 // Setup start/end points 10342 });
10343 dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0; 10343
10344 sn = dir ? s.anchorNode : s.focusNode; 10344 b = s.getBookmark();
10345 so = dir ? s.anchorOffset : s.focusOffset; 10345 dom.replace(nb, bl, 1);
10346 en = dir ? s.focusNode : s.anchorNode; 10346 s.moveToBookmark(b);
10347 eo = dir ? s.focusOffset : s.anchorOffset; 10347 ed.nodeChanged();
10348 10348 return;
10349 // If selection is in empty table cell 10349 }
10350 if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) { 10350 }
10351 dom.remove(sn.firstChild); // Remove BR 10351
10352 10352 val = ed.settings.forced_root_block ? (val || '<p>') : val;
10353 // Create two new block elements 10353
10354 ed.dom.add(sn, se.element, null, '<br />'); 10354 if (val.indexOf('<') == -1)
10355 aft = ed.dom.add(sn, se.element, null, '<br />'); 10355 val = '<' + val + '>';
10356 10356
10357 // Move caret into the last one 10357 if (tinymce.isGecko)
10358 r = d.createRange(); 10358 val = val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi, '$1');
10359 r.selectNodeContents(aft); 10359
10360 r.collapse(1); 10360 ed.getDoc().execCommand('FormatBlock', false, val);
10361 ed.selection.setRng(r); 10361 },
10362 10362
10363 return false; 10363 mceCleanup : function() {
10364 } 10364 var ed = this.editor, s = ed.selection, b = s.getBookmark();
10365 10365 ed.setContent(ed.getContent());
10366 // If the caret is in an invalid location in FF we need to move it into the first block 10366 s.moveToBookmark(b);
10367 if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) { 10367 },
10368 sn = en = sn.firstChild; 10368
10369 so = eo = 0; 10369 mceRemoveNode : function(ui, val) {
10370 rb = d.createRange(); 10370 var ed = this.editor, s = ed.selection, b, n = val || s.getNode();
10371 rb.setStart(sn, 0); 10371
10372 ra = d.createRange(); 10372 // Make sure that the body node isn't removed
10373 ra.setStart(en, 0); 10373 if (n == ed.getBody())
10374 } 10374 return;
10375 10375
10376 // Never use body as start or end node 10376 b = s.getBookmark();
10377 sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes 10377 ed.dom.remove(n, 1);
10378 sn = sn.nodeName == "BODY" ? sn.firstChild : sn; 10378 s.moveToBookmark(b);
10379 en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes 10379 ed.nodeChanged();
10380 en = en.nodeName == "BODY" ? en.firstChild : en; 10380 },
10381 10381
10382 // Get start and end blocks 10382 mceSelectNodeDepth : function(ui, val) {
10383 sb = t.getParentBlock(sn); 10383 var ed = this.editor, s = ed.selection, c = 0;
10384 eb = t.getParentBlock(en); 10384
10385 bn = sb ? sb.nodeName : se.element; // Get block name to create 10385 ed.dom.getParent(s.getNode(), function(n) {
10386 10386 if (n.nodeType == 1 && c++ == val) {
10387 // Return inside list use default browser behavior 10387 s.select(n);
10388 if (t.dom.getParent(sb, function(n) { return /OL|UL|PRE/.test(n.nodeName); })) 10388 ed.nodeChanged();
10389 return true; 10389 return false;
10390 10390 }
10391 // If caption or absolute layers then always generate new blocks within 10391 }, ed.getBody());
10392 if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(sb.style.position))) { 10392 },
10393 bn = se.element; 10393
10394 sb = null; 10394 mceSelectNode : function(u, v) {
10395 } 10395 this.editor.selection.select(v);
10396 10396 },
10397 // If caption or absolute layers then always generate new blocks within 10397
10398 if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|static/gi.test(eb.style.position))) { 10398 mceInsertContent : function(ui, val) {
10399 bn = se.element; 10399 this.editor.selection.setContent(val);
10400 eb = null; 10400 },
10401 } 10401
10402 10402 mceInsertRawHTML : function(ui, val) {
10403 // Use P instead 10403 var ed = this.editor;
10404 if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(sb.style.cssFloat))) { 10404
10405 bn = se.element; 10405 ed.selection.setContent('tiny_mce_marker');
10406 sb = eb = null; 10406 ed.setContent(ed.getContent().replace(/tiny_mce_marker/g, val));
10407 } 10407 },
10408 10408
10409 // Setup new before and after blocks 10409 mceRepaint : function() {
10410 bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn); 10410 var s, b, e = this.editor;
10411 aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn); 10411
10412 10412 if (tinymce.isGecko) {
10413 // Remove id from after clone 10413 try {
10414 aft.removeAttribute('id'); 10414 s = e.selection;
10415 10415 b = s.getBookmark(true);
10416 // Is header and cursor is at the end, then force paragraph under 10416
10417 if (/^(H[1-6])$/.test(bn) && sn.nodeValue && so == sn.nodeValue.length) 10417 if (s.getSel())
10418 aft = ed.dom.create(se.element); 10418 s.getSel().selectAllChildren(e.getBody());
10419 10419
10420 // Find start chop node 10420 s.collapse(true);
10421 n = sc = sn; 10421 s.moveToBookmark(b);
10422 do { 10422 } catch (ex) {
10423 if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName)) 10423 // Ignore
10424 break; 10424 }
10425 10425 }
10426 sc = n; 10426 },
10427 } while ((n = n.previousSibling ? n.previousSibling : n.parentNode)); 10427
10428 10428 queryStateUnderline : function() {
10429 // Find end chop node 10429 var ed = this.editor, n = ed.selection.getNode();
10430 n = ec = en; 10430
10431 do { 10431 if (n && n.nodeName == 'A')
10432 if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName)) 10432 return false;
10433 break; 10433
10434 10434 return this._queryState('Underline');
10435 ec = n; 10435 },
10436 } while ((n = n.nextSibling ? n.nextSibling : n.parentNode)); 10436
10437 10437 queryStateOutdent : function() {
10438 // Place first chop part into before block element 10438 var ed = this.editor, n;
10439 if (sc.nodeName == bn) 10439
10440 rb.setStart(sc, 0); 10440 if (ed.settings.inline_styles) {
10441 else 10441 if ((n = ed.dom.getParent(ed.selection.getStart(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0)
10442 rb.setStartBefore(sc); 10442 return true;
10443 10443
10444 rb.setEnd(sn, so); 10444 if ((n = ed.dom.getParent(ed.selection.getEnd(), ed.dom.isBlock)) && parseInt(n.style.paddingLeft) > 0)
10445 bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari 10445 return true;
10446 10446 }
10447 // Place secnd chop part within new block element 10447
10448 try { 10448 return this.queryStateInsertUnorderedList() || this.queryStateInsertOrderedList() || (!ed.settings.inline_styles && !!ed.dom.getParent(ed.selection.getNode(), 'BLOCKQUOTE'));
10449 ra.setEndAfter(ec); 10449 },
10450 } catch(ex) { 10450
10451 //console.debug(s.focusNode, s.focusOffset); 10451 queryStateInsertUnorderedList : function() {
10452 } 10452 return this.editor.dom.getParent(this.editor.selection.getNode(), 'UL');
10453 10453 },
10454 ra.setStart(en, eo); 10454
10455 aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari 10455 queryStateInsertOrderedList : function() {
10456 10456 return this.editor.dom.getParent(this.editor.selection.getNode(), 'OL');
10457 // Create range around everything 10457 },
10458 r = d.createRange(); 10458
10459 if (!sc.previousSibling && sc.parentNode.nodeName == bn) { 10459 queryStatemceBlockQuote : function() {
10460 r.setStartBefore(sc.parentNode); 10460 return !!this.editor.dom.getParent(this.editor.selection.getStart(), function(n) {return n.nodeName === 'BLOCKQUOTE';});
10461 } else { 10461 },
10462 if (rb.startContainer.nodeName == bn && rb.startOffset == 0) 10462
10463 r.setStartBefore(rb.startContainer); 10463 _applyInlineStyle : function(na, at, op) {
10464 else 10464 var t = this, ed = t.editor, dom = ed.dom, bm, lo = {}, kh, found;
10465 r.setStart(rb.startContainer, rb.startOffset); 10465
10466 } 10466 na = na.toUpperCase();
10467 10467
10468 if (!ec.nextSibling && ec.parentNode.nodeName == bn) 10468 if (op && op.check_classes && at['class'])
10469 r.setEndAfter(ec.parentNode); 10469 op.check_classes.push(at['class']);
10470 else 10470
10471 r.setEnd(ra.endContainer, ra.endOffset); 10471 function removeEmpty() {
10472 10472 each(dom.select(na).reverse(), function(n) {
10473 // Delete and replace it with new block elements 10473 var c = 0;
10474 r.deleteContents(); 10474
10475 10475 // Check if there is any attributes
10476 if (isOpera) 10476 each(dom.getAttribs(n), function(an) {
10477 ed.getWin().scrollTo(0, vp.y); 10477 if (an.nodeName.substring(0, 1) != '_' && dom.getAttrib(n, an.nodeName) != '') {
10478 10478 //console.log(dom.getOuterHTML(n), dom.getAttrib(n, an.nodeName));
10479 // Never wrap blocks in blocks 10479 c++;
10480 if (bef.firstChild && bef.firstChild.nodeName == bn) 10480 }
10481 bef.innerHTML = bef.firstChild.innerHTML; 10481 });
10482 10482
10483 if (aft.firstChild && aft.firstChild.nodeName == bn) 10483 // No attributes then remove the element and keep the children
10484 aft.innerHTML = aft.firstChild.innerHTML; 10484 if (c == 0)
10485 10485 dom.remove(n, 1);
10486 // Padd empty blocks 10486 });
10487 if (isEmpty(bef)) 10487 };
10488 bef.innerHTML = '<br />'; 10488
10489 10489 function replaceFonts() {
10490 function appendStyles(e, en) { 10490 var bm;
10491 var nl = [], nn, n, i; 10491
10492 10492 each(dom.select('span,font'), function(n) {
10493 e.innerHTML = ''; 10493 if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline') {
10494 10494 if (!bm)
10495 // Make clones of style elements 10495 bm = ed.selection.getBookmark();
10496 if (se.keep_styles) { 10496
10497 n = en; 10497 at._mce_new = '1';
10498 do { 10498 dom.replace(dom.create(na, at), n, 1);
10499 // We only want style specific elements 10499 }
10500 if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) { 10500 });
10501 nn = n.cloneNode(false); 10501
10502 dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique 10502 // Remove redundant elements
10503 nl.push(nn); 10503 each(dom.select(na + '[_mce_new]'), function(n) {
10504 } 10504 function removeStyle(n) {
10505 } while (n = n.parentNode); 10505 if (n.nodeType == 1) {
10506 } 10506 each(at.style, function(v, k) {
10507 10507 dom.setStyle(n, k, '');
10508 // Append style elements to aft 10508 });
10509 if (nl.length > 0) { 10509
10510 for (i = nl.length - 1, nn = e; i >= 0; i--) 10510 // Remove spans with the same class or marked classes
10511 nn = nn.appendChild(nl[i]); 10511 if (at['class'] && n.className && op) {
10512 10512 each(op.check_classes, function(c) {
10513 // Padd most inner style element 10513 if (dom.hasClass(n, c))
10514 nl[0].innerHTML = isOpera ? '&nbsp;' : '<br />'; // Extra space for Opera so that the caret can move there 10514 dom.removeClass(n, c);
10515 return nl[0]; // Move caret to most inner element 10515 });
10516 } else 10516 }
10517 e.innerHTML = isOpera ? '&nbsp;' : '<br />'; // Extra space for Opera so that the caret can move there 10517 }
10518 }; 10518 };
10519 10519
10520 // Fill empty afterblook with current style 10520 // Remove specified style information from child elements
10521 if (isEmpty(aft)) 10521 each(dom.select(na, n), removeStyle);
10522 car = appendStyles(aft, en); 10522
10523 10523 // Remove the specified style information on parent if current node is only child (IE)
10524 // Opera needs this one backwards for older versions 10524 if (n.parentNode && n.parentNode.nodeType == 1 && n.parentNode.childNodes.length == 1)
10525 if (isOpera && parseFloat(opera.version()) < 9.5) { 10525 removeStyle(n.parentNode);
10526 r.insertNode(bef); 10526
10527 r.insertNode(aft); 10527 // Remove the child elements style info if a parent already has it
10528 } else { 10528 dom.getParent(n.parentNode, function(pn) {
10529 r.insertNode(aft); 10529 if (pn.nodeType == 1) {
10530 r.insertNode(bef); 10530 if (at.style) {
10531 } 10531 each(at.style, function(v, k) {
10532 10532 var sv;
10533 // Normalize 10533
10534 aft.normalize(); 10534 if (!lo[k] && (sv = dom.getStyle(pn, k))) {
10535 bef.normalize(); 10535 if (sv === v)
10536 10536 dom.setStyle(n, k, '');
10537 function first(n) { 10537
10538 return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false).nextNode() || n; 10538 lo[k] = 1;
10539 }; 10539 }
10540 10540 });
10541 // Move cursor and scroll into view 10541 }
10542 r = d.createRange(); 10542
10543 r.selectNodeContents(isGecko ? first(car || aft) : car || aft); 10543 // Remove spans with the same class or marked classes
10544 r.collapse(1); 10544 if (at['class'] && pn.className && op) {
10545 s.removeAllRanges(); 10545 each(op.check_classes, function(c) {
10546 s.addRange(r); 10546 if (dom.hasClass(pn, c))
10547 10547 dom.removeClass(n, c);
10548 // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs 10548 });
10549 y = ed.dom.getPos(aft).y; 10549 }
10550 ch = aft.clientHeight; 10550 }
10551 10551
10552 // Is element within viewport 10552 return false;
10553 if (y < vp.y || y + ch > vp.y + vp.h) { 10553 });
10554 ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks 10554
10555 //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight)); 10555 n.removeAttribute('_mce_new');
10556 } 10556 });
10557 10557
10558 return false; 10558 removeEmpty();
10559 }, 10559 ed.selection.moveToBookmark(bm);
10560 10560
10561 backspaceDelete : function(e, bs) { 10561 return !!bm;
10562 var t = this, ed = t.editor, b = ed.getBody(), n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn; 10562 };
10563 10563
10564 // The caret sometimes gets stuck in Gecko if you delete empty paragraphs 10564 // Create inline elements
10565 // This workaround removes the element by hand and moves the caret to the previous element 10565 ed.focus();
10566 if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) { 10566 ed.getDoc().execCommand('FontName', false, 'mceinline');
10567 if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) { 10567 replaceFonts();
10568 // Find previous block element 10568
10569 n = sc; 10569 if (kh = t._applyInlineStyle.keyhandler) {
10570 while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ; 10570 ed.onKeyUp.remove(kh);
10571 10571 ed.onKeyPress.remove(kh);
10572 if (n) { 10572 ed.onKeyDown.remove(kh);
10573 if (sc != b.firstChild) { 10573 ed.onSetContent.remove(t._applyInlineStyle.chandler);
10574 // Find last text node 10574 }
10575 w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); 10575
10576 while (tn = w.nextNode()) 10576 if (ed.selection.isCollapsed()) {
10577 n = tn; 10577 // IE will format the current word so this code can't be executed on that browser
10578 10578 if (!isIE) {
10579 // Place caret at the end of last text node 10579 each(dom.getParents(ed.selection.getNode(), 'span'), function(n) {
10580 r = ed.getDoc().createRange(); 10580 each(at.style, function(v, k) {
10581 r.setStart(n, n.nodeValue ? n.nodeValue.length : 0); 10581 var kv;
10582 r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0); 10582
10583 se.setRng(r); 10583 if (kv = dom.getStyle(n, k)) {
10584 10584 if (kv == v) {
10585 // Remove the target container 10585 dom.setStyle(n, k, '');
10586 ed.dom.remove(sc); 10586 found = 2;
10587 } 10587 return false;
10588 10588 }
10589 return Event.cancel(e); 10589
10590 } 10590 found = 1;
10591 } 10591 return false;
10592 } 10592 }
10593 10593 });
10594 // Gecko generates BR elements here and there, we don't like those so lets remove them 10594
10595 function handler(e) { 10595 if (found)
10596 var pr; 10596 return false;
10597 10597 });
10598 e = e.target; 10598
10599 10599 if (found == 2) {
10600 // A new BR was created in a block element, remove it 10600 bm = ed.selection.getBookmark();
10601 if (e && e.parentNode && e.nodeName == 'BR' && (n = t.getParentBlock(e))) { 10601
10602 pr = e.previousSibling; 10602 removeEmpty();
10603 10603
10604 Event.remove(b, 'DOMNodeInserted', handler); 10604 ed.selection.moveToBookmark(bm);
10605 10605
10606 // Is there whitespace at the end of the node before then we might need the pesky BR 10606 // Node change needs to be detached since the onselect event
10607 // to place the caret at a correct location see bug: #2013943 10607 // for the select box will run the onclick handler after onselect call. Todo: Add a nicer fix!
10608 if (pr && pr.nodeType == 3 && /\s+$/.test(pr.nodeValue)) 10608 window.setTimeout(function() {
10609 return; 10609 ed.nodeChanged();
10610 10610 }, 1);
10611 // Only remove BR elements that got inserted in the middle of the text 10611
10612 if (e.previousSibling || e.nextSibling) 10612 return;
10613 ed.dom.remove(e); 10613 }
10614 } 10614 }
10615 }; 10615
10616 10616 // Start collecting styles
10617 // Listen for new nodes 10617 t._pendingStyles = tinymce.extend(t._pendingStyles || {}, at.style);
10618 Event._add(b, 'DOMNodeInserted', handler); 10618
10619 10619 t._applyInlineStyle.chandler = ed.onSetContent.add(function() {
10620 // Remove listener 10620 delete t._pendingStyles;
10621 window.setTimeout(function() { 10621 });
10622 Event._remove(b, 'DOMNodeInserted', handler); 10622
10623 }, 1); 10623 t._applyInlineStyle.keyhandler = kh = function(e) {
10624 } 10624 // Use pending styles
10625 }); 10625 if (t._pendingStyles) {
10626})(); 10626 at.style = t._pendingStyles;
10627 10627 delete t._pendingStyles;
10628/* file:jscripts/tiny_mce/classes/ControlManager.js */ 10628 }
10629 10629
10630(function() { 10630 if (replaceFonts()) {
10631 // Shorten names 10631 ed.onKeyDown.remove(t._applyInlineStyle.keyhandler);
10632 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend; 10632 ed.onKeyPress.remove(t._applyInlineStyle.keyhandler);
10633 10633 }
10634 tinymce.create('tinymce.ControlManager', { 10634
10635 ControlManager : function(ed, s) { 10635 if (e.type == 'keyup')
10636 var t = this, i; 10636 ed.onKeyUp.remove(t._applyInlineStyle.keyhandler);
10637 10637 };
10638 s = s || {}; 10638
10639 t.editor = ed; 10639 ed.onKeyDown.add(kh);
10640 t.controls = {}; 10640 ed.onKeyPress.add(kh);
10641 t.onAdd = new tinymce.util.Dispatcher(t); 10641 ed.onKeyUp.add(kh);
10642 t.onPostRender = new tinymce.util.Dispatcher(t); 10642 } else
10643 t.prefix = s.prefix || ed.id + '_'; 10643 t._pendingStyles = 0;
10644 t._cls = {}; 10644 }
10645 10645 });
10646 t.onPostRender.add(function() { 10646})(tinymce);(function(tinymce) {
10647 each(t.controls, function(c) { 10647 tinymce.create('tinymce.UndoManager', {
10648 c.postRender(); 10648 index : 0,
10649 }); 10649 data : null,
10650 }); 10650 typing : 0,
10651 }, 10651
10652 10652 UndoManager : function(ed) {
10653 get : function(id) { 10653 var t = this, Dispatcher = tinymce.util.Dispatcher;
10654 return this.controls[this.prefix + id] || this.controls[id]; 10654
10655 }, 10655 t.editor = ed;
10656 10656 t.data = [];
10657 setActive : function(id, s) { 10657 t.onAdd = new Dispatcher(this);
10658 var c = null; 10658 t.onUndo = new Dispatcher(this);
10659 10659 t.onRedo = new Dispatcher(this);
10660 if (c = this.get(id)) 10660 },
10661 c.setActive(s); 10661
10662 10662 add : function(l) {
10663 return c; 10663 var t = this, i, ed = t.editor, b, s = ed.settings, la;
10664 }, 10664
10665 10665 l = l || {};
10666 setDisabled : function(id, s) { 10666 l.content = l.content || ed.getContent({format : 'raw', no_events : 1});
10667 var c = null; 10667
10668 10668 // Add undo level if needed
10669 if (c = this.get(id)) 10669 l.content = l.content.replace(/^\s*|\s*$/g, '');
10670 c.setDisabled(s); 10670 la = t.data[t.index > 0 && (t.index == 0 || t.index == t.data.length) ? t.index - 1 : t.index];
10671 10671 if (!l.initial && la && l.content == la.content)
10672 return c; 10672 return null;
10673 }, 10673
10674 10674 // Time to compress
10675 add : function(c) { 10675 if (s.custom_undo_redo_levels) {
10676 var t = this; 10676 if (t.data.length > s.custom_undo_redo_levels) {
10677 10677 for (i = 0; i < t.data.length - 1; i++)
10678 if (c) { 10678 t.data[i] = t.data[i + 1];
10679 t.controls[c.id] = c; 10679
10680 t.onAdd.dispatch(c, t); 10680 t.data.length--;
10681 } 10681 t.index = t.data.length;
10682 10682 }
10683 return c; 10683 }
10684 }, 10684
10685 10685 if (s.custom_undo_redo_restore_selection && !l.initial)
10686 createControl : function(n) { 10686 l.bookmark = b = l.bookmark || ed.selection.getBookmark();
10687 var c, t = this, ed = t.editor; 10687
10688 10688 if (t.index < t.data.length)
10689 each(ed.plugins, function(p) { 10689 t.index++;
10690 if (p.createControl) { 10690
10691 c = p.createControl(n, t); 10691 // Only initial marked undo levels should be allowed as first item
10692 10692 // This to workaround a bug with Firefox and the blur event
10693 if (c) 10693 if (t.data.length === 0 && !l.initial)
10694 return false; 10694 return null;
10695 } 10695
10696 }); 10696 // Add level
10697 10697 t.data.length = t.index + 1;
10698 switch (n) { 10698 t.data[t.index++] = l;
10699 case "|": 10699
10700 case "separator": 10700 if (l.initial)
10701 return t.createSeparator(); 10701 t.index = 0;
10702 } 10702
10703 10703 // Set initial bookmark use first real undo level
10704 if (!c && ed.buttons && (c = ed.buttons[n])) 10704 if (t.data.length == 2 && t.data[0].initial)
10705 return t.createButton(n, c); 10705 t.data[0].bookmark = b;
10706 10706
10707 return t.add(c); 10707 t.onAdd.dispatch(t, l);
10708 }, 10708 ed.isNotDirty = 0;
10709 10709
10710 createDropMenu : function(id, s, cc) { 10710 //console.dir(t.data);
10711 var t = this, ed = t.editor, c, bm, v, cls; 10711
10712 10712 return l;
10713 s = extend({ 10713 },
10714 'class' : 'mceDropDown', 10714
10715 constrain : ed.settings.constrain_menus 10715 undo : function() {
10716 }, s); 10716 var t = this, ed = t.editor, l = l, i;
10717 10717
10718 s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin'; 10718 if (t.typing) {
10719 if (v = ed.getParam('skin_variant')) 10719 t.add();
10720 s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1); 10720 t.typing = 0;
10721 10721 }
10722 id = t.prefix + id; 10722
10723 cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu; 10723 if (t.index > 0) {
10724 c = t.controls[id] = new cls(id, s); 10724 // If undo on last index then take snapshot
10725 c.onAddItem.add(function(c, o) { 10725 if (t.index == t.data.length && t.index > 1) {
10726 var s = o.settings; 10726 i = t.index;
10727 10727 t.typing = 0;
10728 s.title = ed.getLang(s.title, s.title); 10728
10729 10729 if (!t.add())
10730 if (!s.onclick) { 10730 t.index = i;
10731 s.onclick = function(v) { 10731
10732 ed.execCommand(s.cmd, s.ui || false, s.value); 10732 --t.index;
10733 }; 10733 }
10734 } 10734
10735 }); 10735 l = t.data[--t.index];
10736 10736 ed.setContent(l.content, {format : 'raw'});
10737 ed.onRemove.add(function() { 10737 ed.selection.moveToBookmark(l.bookmark);
10738 c.destroy(); 10738
10739 }); 10739 t.onUndo.dispatch(t, l);
10740 10740 }
10741 // Fix for bug #1897785, #1898007 10741
10742 if (tinymce.isIE) { 10742 return l;
10743 c.onShowMenu.add(function() { 10743 },
10744 bm = ed.selection.getBookmark(1); 10744
10745 }); 10745 redo : function() {
10746 10746 var t = this, ed = t.editor, l = null;
10747 c.onHideMenu.add(function() { 10747
10748 if (bm) 10748 if (t.index < t.data.length - 1) {
10749 ed.selection.moveToBookmark(bm); 10749 l = t.data[++t.index];
10750 }); 10750 ed.setContent(l.content, {format : 'raw'});
10751 } 10751 ed.selection.moveToBookmark(l.bookmark);
10752 10752
10753 return t.add(c); 10753 t.onRedo.dispatch(t, l);
10754 }, 10754 }
10755 10755
10756 createListBox : function(id, s, cc) { 10756 return l;
10757 var t = this, ed = t.editor, cmd, c, cls; 10757 },
10758 10758
10759 if (t.get(id)) 10759 clear : function() {
10760 return null; 10760 var t = this;
10761 10761
10762 s.title = ed.translate(s.title); 10762 t.data = [];
10763 s.scope = s.scope || ed; 10763 t.index = 0;
10764 10764 t.typing = 0;
10765 if (!s.onselect) { 10765 t.add({initial : true});
10766 s.onselect = function(v) { 10766 },
10767 ed.execCommand(s.cmd, s.ui || false, v || s.value); 10767
10768 }; 10768 hasUndo : function() {
10769 } 10769 return this.index != 0 || this.typing;
10770 10770 },
10771 s = extend({ 10771
10772 title : s.title, 10772 hasRedo : function() {
10773 'class' : 'mce_' + id, 10773 return this.index < this.data.length - 1;
10774 scope : s.scope, 10774 }
10775 control_manager : t 10775 });
10776 }, s); 10776})(tinymce);
10777 10777(function(tinymce) {
10778 id = t.prefix + id; 10778 // Shorten names
10779 10779 var Event, isIE, isGecko, isOpera, each, extend;
10780 if (ed.settings.use_native_selects) 10780
10781 c = new tinymce.ui.NativeListBox(id, s); 10781 Event = tinymce.dom.Event;
10782 else { 10782 isIE = tinymce.isIE;
10783 cls = cc || t._cls.listbox || tinymce.ui.ListBox; 10783 isGecko = tinymce.isGecko;
10784 c = new cls(id, s); 10784 isOpera = tinymce.isOpera;
10785 } 10785 each = tinymce.each;
10786 10786 extend = tinymce.extend;
10787 t.controls[id] = c; 10787
10788 10788 // Checks if the selection/caret is at the end of the specified block element
10789 // Fix focus problem in Safari 10789 function isAtEnd(rng, par) {
10790 if (tinymce.isWebKit) { 10790 var rng2 = par.ownerDocument.createRange();
10791 c.onPostRender.add(function(c, n) { 10791
10792 // Store bookmark on mousedown 10792 rng2.setStart(rng.endContainer, rng.endOffset);
10793 Event.add(n, 'mousedown', function() { 10793 rng2.setEndAfter(par);
10794 ed.bookmark = ed.selection.getBookmark('simple'); 10794
10795 }); 10795 // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element
10796 10796 return rng2.cloneContents().textContent.length == 0;
10797 // Restore on focus, since it might be lost 10797 };
10798 Event.add(n, 'focus', function() { 10798
10799 ed.selection.moveToBookmark(ed.bookmark); 10799 function isEmpty(n) {
10800 ed.bookmark = null; 10800 n = n.innerHTML;
10801 }); 10801
10802 }); 10802 n = n.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi, '-'); // Keep these convert them to - chars
10803 } 10803 n = n.replace(/<[^>]+>/g, ''); // Remove all tags
10804 10804
10805 if (c.hideMenu) 10805 return n.replace(/[ \t\r\n]+/g, '') == '';
10806 ed.onMouseDown.add(c.hideMenu, c); 10806 };
10807 10807
10808 return t.add(c); 10808 tinymce.create('tinymce.ForceBlocks', {
10809 }, 10809 ForceBlocks : function(ed) {
10810 10810 var t = this, s = ed.settings, elm;
10811 createButton : function(id, s, cc) { 10811
10812 var t = this, ed = t.editor, o, c, cls; 10812 t.editor = ed;
10813 10813 t.dom = ed.dom;
10814 if (t.get(id)) 10814 elm = (s.forced_root_block || 'p').toLowerCase();
10815 return null; 10815 s.element = elm.toUpperCase();
10816 10816
10817 s.title = ed.translate(s.title); 10817 ed.onPreInit.add(t.setup, t);
10818 s.label = ed.translate(s.label); 10818
10819 s.scope = s.scope || ed; 10819 t.reOpera = new RegExp('(\\u00a0|&#160;|&nbsp;)<\/' + elm + '>', 'gi');
10820 10820 t.rePadd = new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g, elm), 'gi');
10821 if (!s.onclick && !s.menu_button) { 10821 t.reNbsp2BR1 = new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi');
10822 s.onclick = function() { 10822 t.reNbsp2BR2 = new RegExp('<%p()([^>]+)>(&nbsp;|&#160;)<\\\/%p>|<%p>(&nbsp;|&#160;)<\\\/%p>'.replace(/%p/g, elm), 'gi');
10823 ed.execCommand(s.cmd, s.ui || false, s.value); 10823 t.reBR2Nbsp = new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');
10824 }; 10824
10825 } 10825 function padd(ed, o) {
10826 10826 if (isOpera)
10827 s = extend({ 10827 o.content = o.content.replace(t.reOpera, '</' + elm + '>');
10828 title : s.title, 10828
10829 'class' : 'mce_' + id, 10829 o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0</' + elm + '>');
10830 unavailable_prefix : ed.getLang('unavailable', ''), 10830
10831 scope : s.scope, 10831 if (!isIE && !isOpera && o.set) {
10832 control_manager : t 10832 // Use &nbsp; instead of BR in padded paragraphs
10833 }, s); 10833 o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2><br /></' + elm + '>');
10834 10834 o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2><br /></' + elm + '>');
10835 id = t.prefix + id; 10835 } else
10836 10836 o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0</' + elm + '>');
10837 if (s.menu_button) { 10837 };
10838 cls = cc || t._cls.menubutton || tinymce.ui.MenuButton; 10838
10839 c = new cls(id, s); 10839 ed.onBeforeSetContent.add(padd);
10840 ed.onMouseDown.add(c.hideMenu, c); 10840 ed.onPostProcess.add(padd);
10841 } else { 10841
10842 cls = t._cls.button || tinymce.ui.Button; 10842 if (s.forced_root_block) {
10843 c = new cls(id, s); 10843 ed.onInit.add(t.forceRoots, t);
10844 } 10844 ed.onSetContent.add(t.forceRoots, t);
10845 10845 ed.onBeforeGetContent.add(t.forceRoots, t);
10846 return t.add(c); 10846 }
10847 }, 10847 },
10848 10848
10849 createMenuButton : function(id, s, cc) { 10849 setup : function() {
10850 s = s || {}; 10850 var t = this, ed = t.editor, s = ed.settings;
10851 s.menu_button = 1; 10851
10852 10852 // Force root blocks when typing and when getting output
10853 return this.createButton(id, s, cc); 10853 if (s.forced_root_block) {
10854 }, 10854 ed.onKeyUp.add(t.forceRoots, t);
10855 10855 ed.onPreProcess.add(t.forceRoots, t);
10856 createSplitButton : function(id, s, cc) { 10856 }
10857 var t = this, ed = t.editor, cmd, c, cls; 10857
10858 10858 if (s.force_br_newlines) {
10859 if (t.get(id)) 10859 // Force IE to produce BRs on enter
10860 return null; 10860 if (isIE) {
10861 10861 ed.onKeyPress.add(function(ed, e) {
10862 s.title = ed.translate(s.title); 10862 var n, s = ed.selection;
10863 s.scope = s.scope || ed; 10863
10864 10864 if (e.keyCode == 13 && s.getNode().nodeName != 'LI') {
10865 if (!s.onclick) { 10865 s.setContent('<br id="__" /> ', {format : 'raw'});
10866 s.onclick = function(v) { 10866 n = ed.dom.get('__');
10867 ed.execCommand(s.cmd, s.ui || false, v || s.value); 10867 n.removeAttribute('id');
10868 }; 10868 s.select(n);
10869 } 10869 s.collapse();
10870 10870 return Event.cancel(e);
10871 if (!s.onselect) { 10871 }
10872 s.onselect = function(v) { 10872 });
10873 ed.execCommand(s.cmd, s.ui || false, v || s.value); 10873 }
10874 }; 10874
10875 } 10875 return;
10876 10876 }
10877 s = extend({ 10877
10878 title : s.title, 10878 if (!isIE && s.force_p_newlines) {
10879 'class' : 'mce_' + id, 10879/* ed.onPreProcess.add(function(ed, o) {
10880 scope : s.scope, 10880 each(ed.dom.select('br', o.node), function(n) {
10881 control_manager : t 10881 var p = n.parentNode;
10882 }, s); 10882
10883 10883 // Replace <p><br /></p> with <p>&nbsp;</p>
10884 id = t.prefix + id; 10884 if (p && p.nodeName == 'p' && (p.childNodes.length == 1 || p.lastChild == n)) {
10885 cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton; 10885 p.replaceChild(ed.getDoc().createTextNode('\u00a0'), n);
10886 c = t.add(new cls(id, s)); 10886 }
10887 ed.onMouseDown.add(c.hideMenu, c); 10887 });
10888 10888 });*/
10889 return c; 10889
10890 }, 10890 ed.onKeyPress.add(function(ed, e) {
10891 10891 if (e.keyCode == 13 && !e.shiftKey) {
10892 createColorSplitButton : function(id, s, cc) { 10892 if (!t.insertPara(e))
10893 var t = this, ed = t.editor, cmd, c, cls, bm; 10893 Event.cancel(e);
10894 10894 }
10895 if (t.get(id)) 10895 });
10896 return null; 10896
10897 10897 if (isGecko) {
10898 s.title = ed.translate(s.title); 10898 ed.onKeyDown.add(function(ed, e) {
10899 s.scope = s.scope || ed; 10899 if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)
10900 10900 t.backspaceDelete(e, e.keyCode == 8);
10901 if (!s.onclick) { 10901 });
10902 s.onclick = function(v) { 10902 }
10903 ed.execCommand(s.cmd, s.ui || false, v || s.value); 10903 }
10904 }; 10904
10905 } 10905 function ren(rn, na) {
10906 10906 var ne = ed.dom.create(na);
10907 if (!s.onselect) { 10907
10908 s.onselect = function(v) { 10908 each(rn.attributes, function(a) {
10909 ed.execCommand(s.cmd, s.ui || false, v || s.value); 10909 if (a.specified && a.nodeValue)
10910 }; 10910 ne.setAttribute(a.nodeName.toLowerCase(), a.nodeValue);
10911 } 10911 });
10912 10912
10913 s = extend({ 10913 each(rn.childNodes, function(n) {
10914 title : s.title, 10914 ne.appendChild(n.cloneNode(true));
10915 'class' : 'mce_' + id, 10915 });
10916 'menu_class' : ed.getParam('skin') + 'Skin', 10916
10917 scope : s.scope, 10917 rn.parentNode.replaceChild(ne, rn);
10918 more_colors_title : ed.getLang('more_colors') 10918
10919 }, s); 10919 return ne;
10920 10920 };
10921 id = t.prefix + id; 10921
10922 cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton; 10922 // Padd empty inline elements within block elements
10923 c = new cls(id, s); 10923 // For example: <p><strong><em></em></strong></p> becomes <p><strong><em>&nbsp;</em></strong></p>
10924 ed.onMouseDown.add(c.hideMenu, c); 10924 ed.onPreProcess.add(function(ed, o) {
10925 10925 each(ed.dom.select('p,h1,h2,h3,h4,h5,h6,div', o.node), function(p) {
10926 // Remove the menu element when the editor is removed 10926 if (isEmpty(p)) {
10927 ed.onRemove.add(function() { 10927 each(ed.dom.select('span,em,strong,b,i', o.node), function(n) {
10928 c.destroy(); 10928 if (!n.hasChildNodes()) {
10929 }); 10929 n.appendChild(ed.getDoc().createTextNode('\u00a0'));
10930 10930 return false; // Break the loop one padding is enough
10931 // Fix for bug #1897785, #1898007 10931 }
10932 if (tinymce.isIE) { 10932 });
10933 c.onShowMenu.add(function() { 10933 }
10934 bm = ed.selection.getBookmark(1); 10934 });
10935 }); 10935 });
10936 10936
10937 c.onHideMenu.add(function() { 10937 // IE specific fixes
10938 if (bm) { 10938 if (isIE) {
10939 ed.selection.moveToBookmark(bm); 10939 // Replaces IE:s auto generated paragraphs with the specified element name
10940 bm = 0; 10940 if (s.element != 'P') {
10941 } 10941 ed.onKeyPress.add(function(ed, e) {
10942 }); 10942 t.lastElm = ed.selection.getNode().nodeName;
10943 } 10943 });
10944 10944
10945 return t.add(c); 10945 ed.onKeyUp.add(function(ed, e) {
10946 }, 10946 var bl, sel = ed.selection, n = sel.getNode(), b = ed.getBody();
10947 10947
10948 createToolbar : function(id, s, cc) { 10948 if (b.childNodes.length === 1 && n.nodeName == 'P') {
10949 var c, t = this, cls; 10949 n = ren(n, s.element);
10950 10950 sel.select(n);
10951 id = t.prefix + id; 10951 sel.collapse();
10952 cls = cc || t._cls.toolbar || tinymce.ui.Toolbar; 10952 ed.nodeChanged();
10953 c = new cls(id, s); 10953 } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {
10954 10954 bl = ed.dom.getParent(n, 'p');
10955 if (t.get(id)) 10955
10956 return null; 10956 if (bl) {
10957 10957 ren(bl, s.element);
10958 return t.add(c); 10958 ed.nodeChanged();
10959 }, 10959 }
10960 10960 }
10961 createSeparator : function(cc) { 10961 });
10962 var cls = cc || this._cls.separator || tinymce.ui.Separator; 10962 }
10963 10963 }
10964 return new cls(); 10964 },
10965 }, 10965
10966 10966 find : function(n, t, s) {
10967 setControlType : function(n, c) { 10967 var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, false), c = -1;
10968 return this._cls[n.toLowerCase()] = c; 10968
10969 }, 10969 while (n = w.nextNode()) {
10970 10970 c++;
10971 destroy : function() { 10971
10972 each(this.controls, function(c) { 10972 // Index by node
10973 c.destroy(); 10973 if (t == 0 && n == s)
10974 }); 10974 return c;
10975 10975
10976 this.controls = null; 10976 // Node by index
10977 } 10977 if (t == 1 && c == s)
10978 10978 return n;
10979 }); 10979 }
10980})(); 10980
10981 10981 return -1;
10982/* file:jscripts/tiny_mce/classes/WindowManager.js */ 10982 },
10983 10983
10984(function() { 10984 forceRoots : function(ed, e) {
10985 var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera; 10985 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;
10986 10986 var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid;
10987 tinymce.create('tinymce.WindowManager', { 10987
10988 WindowManager : function(ed) { 10988 // Fix for bug #1863847
10989 var t = this; 10989 //if (e && e.keyCode == 13)
10990 10990 // return true;
10991 t.editor = ed; 10991
10992 t.onOpen = new Dispatcher(t); 10992 // Wrap non blocks into blocks
10993 t.onClose = new Dispatcher(t); 10993 for (i = nl.length - 1; i >= 0; i--) {
10994 t.params = {}; 10994 nx = nl[i];
10995 t.features = {}; 10995
10996 }, 10996 // Is text or non block element
10997 10997 if (nx.nodeType === 3 || (!t.dom.isBlock(nx) && nx.nodeType !== 8 && !/^(script|mce:script|style|mce:style)$/i.test(nx.nodeName))) {
10998 open : function(s, p) { 10998 if (!bl) {
10999 var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u; 10999 // Create new block but ignore whitespace
11000 11000 if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) {
11001 // Default some options 11001 // Store selection
11002 s = s || {}; 11002 if (si == -2 && r) {
11003 p = p || {}; 11003 if (!isIE) {
11004 sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window 11004 // If selection is element then mark it
11005 sh = isOpera ? vp.h : screen.height; 11005 if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) {
11006 s.name = s.name || 'mc_' + new Date().getTime(); 11006 // Save the id of the selected element
11007 s.width = parseInt(s.width || 320); 11007 eid = n.getAttribute("id");
11008 s.height = parseInt(s.height || 240); 11008 n.setAttribute("id", "__mce");
11009 s.resizable = true; 11009 } else {
11010 s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0); 11010 // If element is inside body, might not be the case in contentEdiable mode
11011 s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0); 11011 if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) {
11012 p.inline = false; 11012 so = r.startOffset;
11013 p.mce_width = s.width; 11013 eo = r.endOffset;
11014 p.mce_height = s.height; 11014 si = t.find(b, 0, r.startContainer);
11015 p.mce_auto_focus = s.auto_focus; 11015 ei = t.find(b, 0, r.endContainer);
11016 11016 }
11017 if (mo) { 11017 }
11018 if (isIE) { 11018 } else {
11019 s.center = true; 11019 tr = d.body.createTextRange();
11020 s.help = false; 11020 tr.moveToElementText(b);
11021 s.dialogWidth = s.width + 'px'; 11021 tr.collapse(1);
11022 s.dialogHeight = s.height + 'px'; 11022 bp = tr.move('character', c) * -1;
11023 s.scroll = s.scrollbars || false; 11023
11024 } 11024 tr = r.duplicate();
11025 } 11025 tr.collapse(1);
11026 11026 sp = tr.move('character', c) * -1;
11027 // Build features string 11027
11028 each(s, function(v, k) { 11028 tr = r.duplicate();
11029 if (tinymce.is(v, 'boolean')) 11029 tr.collapse(0);
11030 v = v ? 'yes' : 'no'; 11030 le = (tr.move('character', c) * -1) - sp;
11031 11031
11032 if (!/^(name|url)$/.test(k)) { 11032 si = sp - bp;
11033 if (isIE && mo) 11033 ei = le;
11034 f += (f ? ';' : '') + k + ':' + v; 11034 }
11035 else 11035 }
11036 f += (f ? ',' : '') + k + '=' + v; 11036
11037 } 11037 bl = ed.dom.create(ed.settings.forced_root_block);
11038 }); 11038 bl.appendChild(nx.cloneNode(1));
11039 11039 nx.parentNode.replaceChild(bl, nx);
11040 t.features = s; 11040 }
11041 t.params = p; 11041 } else {
11042 t.onOpen.dispatch(t, s, p); 11042 if (bl.hasChildNodes())
11043 11043 bl.insertBefore(nx, bl.firstChild);
11044 u = s.url || s.file; 11044 else
11045 if (tinymce.relaxedDomain) 11045 bl.appendChild(nx);
11046 u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain; 11046 }
11047 11047 } else
11048 u = tinymce._addVer(u); 11048 bl = null; // Time to create new block
11049 11049 }
11050 try { 11050
11051 if (isIE && mo) { 11051 // Restore selection
11052 w = 1; 11052 if (si != -2) {
11053 window.showModalDialog(u, window, f); 11053 if (!isIE) {
11054 } else 11054 bl = b.getElementsByTagName(ed.settings.element)[0];
11055 w = window.open(u, s.name, f); 11055 r = d.createRange();
11056 } catch (ex) { 11056
11057 // Ignore 11057 // Select last location or generated block
11058 } 11058 if (si != -1)
11059 11059 r.setStart(t.find(b, 1, si), so);
11060 if (!w) 11060 else
11061 alert(t.editor.getLang('popup_blocked')); 11061 r.setStart(bl, 0);
11062 }, 11062
11063 11063 // Select last location or generated block
11064 close : function(w) { 11064 if (ei != -1)
11065 w.close(); 11065 r.setEnd(t.find(b, 1, ei), eo);
11066 this.onClose.dispatch(this); 11066 else
11067 }, 11067 r.setEnd(bl, 0);
11068 11068
11069 createInstance : function(cl, a, b, c, d, e) { 11069 if (s) {
11070 var f = tinymce.resolve(cl); 11070 s.removeAllRanges();
11071 11071 s.addRange(r);
11072 return new f(a, b, c, d, e); 11072 }
11073 }, 11073 } else {
11074 11074 try {
11075 confirm : function(t, cb, s, w) { 11075 r = s.createRange();
11076 w = w || window; 11076 r.moveToElementText(b);
11077 11077 r.collapse(1);
11078 cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t)))); 11078 r.moveStart('character', si);
11079 }, 11079 r.moveEnd('character', ei);
11080 11080 r.select();
11081 alert : function(tx, cb, s, w) { 11081 } catch (ex) {
11082 var t = this; 11082 // Ignore
11083 11083 }
11084 w = w || window; 11084 }
11085 w.alert(t._decode(t.editor.getLang(tx, tx))); 11085 } else if (!isIE && (n = ed.dom.get('__mce'))) {
11086 11086 // Restore the id of the selected element
11087 if (cb) 11087 if (eid)
11088 cb.call(s || t); 11088 n.setAttribute('id', eid);
11089 }, 11089 else
11090 11090 n.removeAttribute('id');
11091 // Internal functions 11091
11092 11092 // Move caret before selected element
11093 _decode : function(s) { 11093 r = d.createRange();
11094 return tinymce.DOM.decode(s).replace(/\\n/g, '\n'); 11094 r.setStartBefore(n);
11095 } 11095 r.setEndBefore(n);
11096 11096 se.setRng(r);
11097 }); 11097 }
11098}()); \ No newline at end of file 11098 },
11099
11100 getParentBlock : function(n) {
11101 var d = this.dom;
11102
11103 return d.getParent(n, d.isBlock);
11104 },
11105
11106 insertPara : function(e) {
11107 var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;
11108 var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;
11109
11110 // If root blocks are forced then use Operas default behavior since it's really good
11111// Removed due to bug: #1853816
11112// if (se.forced_root_block && isOpera)
11113// return true;
11114
11115 // Setup before range
11116 rb = d.createRange();
11117
11118 // If is before the first block element and in body, then move it into first block element
11119 rb.setStart(s.anchorNode, s.anchorOffset);
11120 rb.collapse(true);
11121
11122 // Setup after range
11123 ra = d.createRange();
11124
11125 // If is before the first block element and in body, then move it into first block element
11126 ra.setStart(s.focusNode, s.focusOffset);
11127 ra.collapse(true);
11128
11129 // Setup start/end points
11130 dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;
11131 sn = dir ? s.anchorNode : s.focusNode;
11132 so = dir ? s.anchorOffset : s.focusOffset;
11133 en = dir ? s.focusNode : s.anchorNode;
11134 eo = dir ? s.focusOffset : s.anchorOffset;
11135
11136 // If selection is in empty table cell
11137 if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {
11138 if (sn.firstChild.nodeName == 'BR')
11139 dom.remove(sn.firstChild); // Remove BR
11140
11141 // Create two new block elements
11142 if (sn.childNodes.length == 0) {
11143 ed.dom.add(sn, se.element, null, '<br />');
11144 aft = ed.dom.add(sn, se.element, null, '<br />');
11145 } else {
11146 n = sn.innerHTML;
11147 sn.innerHTML = '';
11148 ed.dom.add(sn, se.element, null, n);
11149 aft = ed.dom.add(sn, se.element, null, '<br />');
11150 }
11151
11152 // Move caret into the last one
11153 r = d.createRange();
11154 r.selectNodeContents(aft);
11155 r.collapse(1);
11156 ed.selection.setRng(r);
11157
11158 return false;
11159 }
11160
11161 // If the caret is in an invalid location in FF we need to move it into the first block
11162 if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {
11163 sn = en = sn.firstChild;
11164 so = eo = 0;
11165 rb = d.createRange();
11166 rb.setStart(sn, 0);
11167 ra = d.createRange();
11168 ra.setStart(en, 0);
11169 }
11170
11171 // Never use body as start or end node
11172 sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes
11173 sn = sn.nodeName == "BODY" ? sn.firstChild : sn;
11174 en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes
11175 en = en.nodeName == "BODY" ? en.firstChild : en;
11176
11177 // Get start and end blocks
11178 sb = t.getParentBlock(sn);
11179 eb = t.getParentBlock(en);
11180 bn = sb ? sb.nodeName : se.element; // Get block name to create
11181
11182 // Return inside list use default browser behavior
11183 if (t.dom.getParent(sb, 'ol,ul,pre'))
11184 return true;
11185
11186 // If caption or absolute layers then always generate new blocks within
11187 if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {
11188 bn = se.element;
11189 sb = null;
11190 }
11191
11192 // If caption or absolute layers then always generate new blocks within
11193 if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {
11194 bn = se.element;
11195 eb = null;
11196 }
11197
11198 // Use P instead
11199 if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {
11200 bn = se.element;
11201 sb = eb = null;
11202 }
11203
11204 // Setup new before and after blocks
11205 bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);
11206 aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);
11207
11208 // Remove id from after clone
11209 aft.removeAttribute('id');
11210
11211 // Is header and cursor is at the end, then force paragraph under
11212 if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))
11213 aft = ed.dom.create(se.element);
11214
11215 // Find start chop node
11216 n = sc = sn;
11217 do {
11218 if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))
11219 break;
11220
11221 sc = n;
11222 } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));
11223
11224 // Find end chop node
11225 n = ec = en;
11226 do {
11227 if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))
11228 break;
11229
11230 ec = n;
11231 } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));
11232
11233 // Place first chop part into before block element
11234 if (sc.nodeName == bn)
11235 rb.setStart(sc, 0);
11236 else
11237 rb.setStartBefore(sc);
11238
11239 rb.setEnd(sn, so);
11240 bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari
11241
11242 // Place secnd chop part within new block element
11243 try {
11244 ra.setEndAfter(ec);
11245 } catch(ex) {
11246 //console.debug(s.focusNode, s.focusOffset);
11247 }
11248
11249 ra.setStart(en, eo);
11250 aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari
11251
11252 // Create range around everything
11253 r = d.createRange();
11254 if (!sc.previousSibling && sc.parentNode.nodeName == bn) {
11255 r.setStartBefore(sc.parentNode);
11256 } else {
11257 if (rb.startContainer.nodeName == bn && rb.startOffset == 0)
11258 r.setStartBefore(rb.startContainer);
11259 else
11260 r.setStart(rb.startContainer, rb.startOffset);
11261 }
11262
11263 if (!ec.nextSibling && ec.parentNode.nodeName == bn)
11264 r.setEndAfter(ec.parentNode);
11265 else
11266 r.setEnd(ra.endContainer, ra.endOffset);
11267
11268 // Delete and replace it with new block elements
11269 r.deleteContents();
11270
11271 if (isOpera)
11272 ed.getWin().scrollTo(0, vp.y);
11273
11274 // Never wrap blocks in blocks
11275 if (bef.firstChild && bef.firstChild.nodeName == bn)
11276 bef.innerHTML = bef.firstChild.innerHTML;
11277
11278 if (aft.firstChild && aft.firstChild.nodeName == bn)
11279 aft.innerHTML = aft.firstChild.innerHTML;
11280
11281 // Padd empty blocks
11282 if (isEmpty(bef))
11283 bef.innerHTML = '<br />';
11284
11285 function appendStyles(e, en) {
11286 var nl = [], nn, n, i;
11287
11288 e.innerHTML = '';
11289
11290 // Make clones of style elements
11291 if (se.keep_styles) {
11292 n = en;
11293 do {
11294 // We only want style specific elements
11295 if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {
11296 nn = n.cloneNode(false);
11297 dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique
11298 nl.push(nn);
11299 }
11300 } while (n = n.parentNode);
11301 }
11302
11303 // Append style elements to aft
11304 if (nl.length > 0) {
11305 for (i = nl.length - 1, nn = e; i >= 0; i--)
11306 nn = nn.appendChild(nl[i]);
11307
11308 // Padd most inner style element
11309 nl[0].innerHTML = isOpera ? '&nbsp;' : '<br />'; // Extra space for Opera so that the caret can move there
11310 return nl[0]; // Move caret to most inner element
11311 } else
11312 e.innerHTML = isOpera ? '&nbsp;' : '<br />'; // Extra space for Opera so that the caret can move there
11313 };
11314
11315 // Fill empty afterblook with current style
11316 if (isEmpty(aft))
11317 car = appendStyles(aft, en);
11318
11319 // Opera needs this one backwards for older versions
11320 if (isOpera && parseFloat(opera.version()) < 9.5) {
11321 r.insertNode(bef);
11322 r.insertNode(aft);
11323 } else {
11324 r.insertNode(aft);
11325 r.insertNode(bef);
11326 }
11327
11328 // Normalize
11329 aft.normalize();
11330 bef.normalize();
11331
11332 function first(n) {
11333 return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false).nextNode() || n;
11334 };
11335
11336 // Move cursor and scroll into view
11337 r = d.createRange();
11338 r.selectNodeContents(isGecko ? first(car || aft) : car || aft);
11339 r.collapse(1);
11340 s.removeAllRanges();
11341 s.addRange(r);
11342
11343 // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs
11344 y = ed.dom.getPos(aft).y;
11345 ch = aft.clientHeight;
11346
11347 // Is element within viewport
11348 if (y < vp.y || y + ch > vp.y + vp.h) {
11349 ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks
11350 //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight));
11351 }
11352
11353 return false;
11354 },
11355
11356 backspaceDelete : function(e, bs) {
11357 var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn;
11358
11359 /*
11360 var par, rng, nextBlock;
11361
11362 // Delete key will not merge paragraphs on Gecko so we need to do this manually
11363 // Hitting the delete key at the following caret position doesn't merge the elements <p>A|</p><p>B</p>
11364 // This logic will merge them into this: <p>A|B</p>
11365 if (e.keyCode == 46) {
11366 if (r.collapsed) {
11367 par = dom.getParent(sc, 'p,h1,h2,h3,h4,h5,h6,div');
11368
11369 if (par) {
11370 rng = dom.createRng();
11371
11372 rng.setStart(sc, r.startOffset);
11373 rng.setEndAfter(par);
11374
11375 // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element
11376 if (dom.getOuterHTML(rng.cloneContents()).replace(/<[^>]+>/g, '').length == 0) {
11377 nextBlock = dom.getNext(par, 'p,h1,h2,h3,h4,h5,h6,div');
11378
11379 // Copy all children from next sibling block and remove it
11380 if (nextBlock) {
11381 each(nextBlock.childNodes, function(node) {
11382 par.appendChild(node.cloneNode(true));
11383 });
11384
11385 dom.remove(nextBlock);
11386 }
11387
11388 // Block the default even since the Gecko team might eventually fix this
11389 // We will remove this logic once they do we can't feature detect this one
11390 e.preventDefault();
11391 return;
11392 }
11393 }
11394 }
11395 }
11396 */
11397
11398 // The caret sometimes gets stuck in Gecko if you delete empty paragraphs
11399 // This workaround removes the element by hand and moves the caret to the previous element
11400 if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {
11401 if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {
11402 // Find previous block element
11403 n = sc;
11404 while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;
11405
11406 if (n) {
11407 if (sc != b.firstChild) {
11408 // Find last text node
11409 w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);
11410 while (tn = w.nextNode())
11411 n = tn;
11412
11413 // Place caret at the end of last text node
11414 r = ed.getDoc().createRange();
11415 r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);
11416 r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);
11417 se.setRng(r);
11418
11419 // Remove the target container
11420 ed.dom.remove(sc);
11421 }
11422
11423 return Event.cancel(e);
11424 }
11425 }
11426 }
11427
11428 // Gecko generates BR elements here and there, we don't like those so lets remove them
11429 function handler(e) {
11430 var pr;
11431
11432 e = e.target;
11433
11434 // A new BR was created in a block element, remove it
11435 if (e && e.parentNode && e.nodeName == 'BR' && (n = t.getParentBlock(e))) {
11436 pr = e.previousSibling;
11437
11438 Event.remove(b, 'DOMNodeInserted', handler);
11439
11440 // Is there whitespace at the end of the node before then we might need the pesky BR
11441 // to place the caret at a correct location see bug: #2013943
11442 if (pr && pr.nodeType == 3 && /\s+$/.test(pr.nodeValue))
11443 return;
11444
11445 // Only remove BR elements that got inserted in the middle of the text
11446 if (e.previousSibling || e.nextSibling)
11447 ed.dom.remove(e);
11448 }
11449 };
11450
11451 // Listen for new nodes
11452 Event._add(b, 'DOMNodeInserted', handler);
11453
11454 // Remove listener
11455 window.setTimeout(function() {
11456 Event._remove(b, 'DOMNodeInserted', handler);
11457 }, 1);
11458 }
11459 });
11460})(tinymce);
11461(function(tinymce) {
11462 // Shorten names
11463 var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;
11464
11465 tinymce.create('tinymce.ControlManager', {
11466 ControlManager : function(ed, s) {
11467 var t = this, i;
11468
11469 s = s || {};
11470 t.editor = ed;
11471 t.controls = {};
11472 t.onAdd = new tinymce.util.Dispatcher(t);
11473 t.onPostRender = new tinymce.util.Dispatcher(t);
11474 t.prefix = s.prefix || ed.id + '_';
11475 t._cls = {};
11476
11477 t.onPostRender.add(function() {
11478 each(t.controls, function(c) {
11479 c.postRender();
11480 });
11481 });
11482 },
11483
11484 get : function(id) {
11485 return this.controls[this.prefix + id] || this.controls[id];
11486 },
11487
11488 setActive : function(id, s) {
11489 var c = null;
11490
11491 if (c = this.get(id))
11492 c.setActive(s);
11493
11494 return c;
11495 },
11496
11497 setDisabled : function(id, s) {
11498 var c = null;
11499
11500 if (c = this.get(id))
11501 c.setDisabled(s);
11502
11503 return c;
11504 },
11505
11506 add : function(c) {
11507 var t = this;
11508
11509 if (c) {
11510 t.controls[c.id] = c;
11511 t.onAdd.dispatch(c, t);
11512 }
11513
11514 return c;
11515 },
11516
11517 createControl : function(n) {
11518 var c, t = this, ed = t.editor;
11519
11520 each(ed.plugins, function(p) {
11521 if (p.createControl) {
11522 c = p.createControl(n, t);
11523
11524 if (c)
11525 return false;
11526 }
11527 });
11528
11529 switch (n) {
11530 case "|":
11531 case "separator":
11532 return t.createSeparator();
11533 }
11534
11535 if (!c && ed.buttons && (c = ed.buttons[n]))
11536 return t.createButton(n, c);
11537
11538 return t.add(c);
11539 },
11540
11541 createDropMenu : function(id, s, cc) {
11542 var t = this, ed = t.editor, c, bm, v, cls;
11543
11544 s = extend({
11545 'class' : 'mceDropDown',
11546 constrain : ed.settings.constrain_menus
11547 }, s);
11548
11549 s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';
11550 if (v = ed.getParam('skin_variant'))
11551 s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);
11552
11553 id = t.prefix + id;
11554 cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;
11555 c = t.controls[id] = new cls(id, s);
11556 c.onAddItem.add(function(c, o) {
11557 var s = o.settings;
11558
11559 s.title = ed.getLang(s.title, s.title);
11560
11561 if (!s.onclick) {
11562 s.onclick = function(v) {
11563 ed.execCommand(s.cmd, s.ui || false, s.value);
11564 };
11565 }
11566 });
11567
11568 ed.onRemove.add(function() {
11569 c.destroy();
11570 });
11571
11572 // Fix for bug #1897785, #1898007
11573 if (tinymce.isIE) {
11574 c.onShowMenu.add(function() {
11575 // IE 8 needs focus in order to store away a range with the current collapsed caret location
11576 ed.focus();
11577
11578 bm = ed.selection.getBookmark(1);
11579 });
11580
11581 c.onHideMenu.add(function() {
11582 if (bm) {
11583 ed.selection.moveToBookmark(bm);
11584 bm = 0;
11585 }
11586 });
11587 }
11588
11589 return t.add(c);
11590 },
11591
11592 createListBox : function(id, s, cc) {
11593 var t = this, ed = t.editor, cmd, c, cls;
11594
11595 if (t.get(id))
11596 return null;
11597
11598 s.title = ed.translate(s.title);
11599 s.scope = s.scope || ed;
11600
11601 if (!s.onselect) {
11602 s.onselect = function(v) {
11603 ed.execCommand(s.cmd, s.ui || false, v || s.value);
11604 };
11605 }
11606
11607 s = extend({
11608 title : s.title,
11609 'class' : 'mce_' + id,
11610 scope : s.scope,
11611 control_manager : t
11612 }, s);
11613
11614 id = t.prefix + id;
11615
11616 if (ed.settings.use_native_selects)
11617 c = new tinymce.ui.NativeListBox(id, s);
11618 else {
11619 cls = cc || t._cls.listbox || tinymce.ui.ListBox;
11620 c = new cls(id, s);
11621 }
11622
11623 t.controls[id] = c;
11624
11625 // Fix focus problem in Safari
11626 if (tinymce.isWebKit) {
11627 c.onPostRender.add(function(c, n) {
11628 // Store bookmark on mousedown
11629 Event.add(n, 'mousedown', function() {
11630 ed.bookmark = ed.selection.getBookmark(1);
11631 });
11632
11633 // Restore on focus, since it might be lost
11634 Event.add(n, 'focus', function() {
11635 ed.selection.moveToBookmark(ed.bookmark);
11636 ed.bookmark = null;
11637 });
11638 });
11639 }
11640
11641 if (c.hideMenu)
11642 ed.onMouseDown.add(c.hideMenu, c);
11643
11644 return t.add(c);
11645 },
11646
11647 createButton : function(id, s, cc) {
11648 var t = this, ed = t.editor, o, c, cls;
11649
11650 if (t.get(id))
11651 return null;
11652
11653 s.title = ed.translate(s.title);
11654 s.label = ed.translate(s.label);
11655 s.scope = s.scope || ed;
11656
11657 if (!s.onclick && !s.menu_button) {
11658 s.onclick = function() {
11659 ed.execCommand(s.cmd, s.ui || false, s.value);
11660 };
11661 }
11662
11663 s = extend({
11664 title : s.title,
11665 'class' : 'mce_' + id,
11666 unavailable_prefix : ed.getLang('unavailable', ''),
11667 scope : s.scope,
11668 control_manager : t
11669 }, s);
11670
11671 id = t.prefix + id;
11672
11673 if (s.menu_button) {
11674 cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;
11675 c = new cls(id, s);
11676 ed.onMouseDown.add(c.hideMenu, c);
11677 } else {
11678 cls = t._cls.button || tinymce.ui.Button;
11679 c = new cls(id, s);
11680 }
11681
11682 return t.add(c);
11683 },
11684
11685 createMenuButton : function(id, s, cc) {
11686 s = s || {};
11687 s.menu_button = 1;
11688
11689 return this.createButton(id, s, cc);
11690 },
11691
11692 createSplitButton : function(id, s, cc) {
11693 var t = this, ed = t.editor, cmd, c, cls;
11694
11695 if (t.get(id))
11696 return null;
11697
11698 s.title = ed.translate(s.title);
11699 s.scope = s.scope || ed;
11700
11701 if (!s.onclick) {
11702 s.onclick = function(v) {
11703 ed.execCommand(s.cmd, s.ui || false, v || s.value);
11704 };
11705 }
11706
11707 if (!s.onselect) {
11708 s.onselect = function(v) {
11709 ed.execCommand(s.cmd, s.ui || false, v || s.value);
11710 };
11711 }
11712
11713 s = extend({
11714 title : s.title,
11715 'class' : 'mce_' + id,
11716 scope : s.scope,
11717 control_manager : t
11718 }, s);
11719
11720 id = t.prefix + id;
11721 cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;
11722 c = t.add(new cls(id, s));
11723 ed.onMouseDown.add(c.hideMenu, c);
11724
11725 return c;
11726 },
11727
11728 createColorSplitButton : function(id, s, cc) {
11729 var t = this, ed = t.editor, cmd, c, cls, bm;
11730
11731 if (t.get(id))
11732 return null;
11733
11734 s.title = ed.translate(s.title);
11735 s.scope = s.scope || ed;
11736
11737 if (!s.onclick) {
11738 s.onclick = function(v) {
11739 if (tinymce.isIE)
11740 bm = ed.selection.getBookmark(1);
11741
11742 ed.execCommand(s.cmd, s.ui || false, v || s.value);
11743 };
11744 }
11745
11746 if (!s.onselect) {
11747 s.onselect = function(v) {
11748 ed.execCommand(s.cmd, s.ui || false, v || s.value);
11749 };
11750 }
11751
11752 s = extend({
11753 title : s.title,
11754 'class' : 'mce_' + id,
11755 'menu_class' : ed.getParam('skin') + 'Skin',
11756 scope : s.scope,
11757 more_colors_title : ed.getLang('more_colors')
11758 }, s);
11759
11760 id = t.prefix + id;
11761 cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;
11762 c = new cls(id, s);
11763 ed.onMouseDown.add(c.hideMenu, c);
11764
11765 // Remove the menu element when the editor is removed
11766 ed.onRemove.add(function() {
11767 c.destroy();
11768 });
11769
11770 // Fix for bug #1897785, #1898007
11771 if (tinymce.isIE) {
11772 c.onShowMenu.add(function() {
11773 // IE 8 needs focus in order to store away a range with the current collapsed caret location
11774 ed.focus();
11775 bm = ed.selection.getBookmark(1);
11776 });
11777
11778 c.onHideMenu.add(function() {
11779 if (bm) {
11780 ed.selection.moveToBookmark(bm);
11781 bm = 0;
11782 }
11783 });
11784 }
11785
11786 return t.add(c);
11787 },
11788
11789 createToolbar : function(id, s, cc) {
11790 var c, t = this, cls;
11791
11792 id = t.prefix + id;
11793 cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;
11794 c = new cls(id, s);
11795
11796 if (t.get(id))
11797 return null;
11798
11799 return t.add(c);
11800 },
11801
11802 createSeparator : function(cc) {
11803 var cls = cc || this._cls.separator || tinymce.ui.Separator;
11804
11805 return new cls();
11806 },
11807
11808 setControlType : function(n, c) {
11809 return this._cls[n.toLowerCase()] = c;
11810 },
11811
11812 destroy : function() {
11813 each(this.controls, function(c) {
11814 c.destroy();
11815 });
11816
11817 this.controls = null;
11818 }
11819 });
11820})(tinymce);
11821(function(tinymce) {
11822 var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;
11823
11824 tinymce.create('tinymce.WindowManager', {
11825 WindowManager : function(ed) {
11826 var t = this;
11827
11828 t.editor = ed;
11829 t.onOpen = new Dispatcher(t);
11830 t.onClose = new Dispatcher(t);
11831 t.params = {};
11832 t.features = {};
11833 },
11834
11835 open : function(s, p) {
11836 var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;
11837
11838 // Default some options
11839 s = s || {};
11840 p = p || {};
11841 sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window
11842 sh = isOpera ? vp.h : screen.height;
11843 s.name = s.name || 'mc_' + new Date().getTime();
11844 s.width = parseInt(s.width || 320);
11845 s.height = parseInt(s.height || 240);
11846 s.resizable = true;
11847 s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);
11848 s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);
11849 p.inline = false;
11850 p.mce_width = s.width;
11851 p.mce_height = s.height;
11852 p.mce_auto_focus = s.auto_focus;
11853
11854 if (mo) {
11855 if (isIE) {
11856 s.center = true;
11857 s.help = false;
11858 s.dialogWidth = s.width + 'px';
11859 s.dialogHeight = s.height + 'px';
11860 s.scroll = s.scrollbars || false;
11861 }
11862 }
11863
11864 // Build features string
11865 each(s, function(v, k) {
11866 if (tinymce.is(v, 'boolean'))
11867 v = v ? 'yes' : 'no';
11868
11869 if (!/^(name|url)$/.test(k)) {
11870 if (isIE && mo)
11871 f += (f ? ';' : '') + k + ':' + v;
11872 else
11873 f += (f ? ',' : '') + k + '=' + v;
11874 }
11875 });
11876
11877 t.features = s;
11878 t.params = p;
11879 t.onOpen.dispatch(t, s, p);
11880
11881 u = s.url || s.file;
11882 u = tinymce._addVer(u);
11883
11884 try {
11885 if (isIE && mo) {
11886 w = 1;
11887 window.showModalDialog(u, window, f);
11888 } else
11889 w = window.open(u, s.name, f);
11890 } catch (ex) {
11891 // Ignore
11892 }
11893
11894 if (!w)
11895 alert(t.editor.getLang('popup_blocked'));
11896 },
11897
11898 close : function(w) {
11899 w.close();
11900 this.onClose.dispatch(this);
11901 },
11902
11903 createInstance : function(cl, a, b, c, d, e) {
11904 var f = tinymce.resolve(cl);
11905
11906 return new f(a, b, c, d, e);
11907 },
11908
11909 confirm : function(t, cb, s, w) {
11910 w = w || window;
11911
11912 cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));
11913 },
11914
11915 alert : function(tx, cb, s, w) {
11916 var t = this;
11917
11918 w = w || window;
11919 w.alert(t._decode(t.editor.getLang(tx, tx)));
11920
11921 if (cb)
11922 cb.call(s || t);
11923 },
11924
11925 // Internal functions
11926
11927 _decode : function(s) {
11928 return tinymce.DOM.decode(s).replace(/\\n/g, '\n');
11929 }
11930 });
11931}(tinymce));(function(tinymce) {
11932 tinymce.CommandManager = function() {
11933 var execCommands = {}, queryStateCommands = {}, queryValueCommands = {};
11934
11935 function add(collection, cmd, func, scope) {
11936 if (typeof(cmd) == 'string')
11937 cmd = [cmd];
11938
11939 tinymce.each(cmd, function(cmd) {
11940 collection[cmd.toLowerCase()] = {func : func, scope : scope};
11941 });
11942 };
11943
11944 tinymce.extend(this, {
11945 add : function(cmd, func, scope) {
11946 add(execCommands, cmd, func, scope);
11947 },
11948
11949 addQueryStateHandler : function(cmd, func, scope) {
11950 add(queryStateCommands, cmd, func, scope);
11951 },
11952
11953 addQueryValueHandler : function(cmd, func, scope) {
11954 add(queryValueCommands, cmd, func, scope);
11955 },
11956
11957 execCommand : function(scope, cmd, ui, value, args) {
11958 if (cmd = execCommands[cmd.toLowerCase()]) {
11959 if (cmd.func.call(scope || cmd.scope, ui, value, args) !== false)
11960 return true;
11961 }
11962 },
11963
11964 queryCommandValue : function() {
11965 if (cmd = queryValueCommands[cmd.toLowerCase()])
11966 return cmd.func.call(scope || cmd.scope, ui, value, args);
11967 },
11968
11969 queryCommandState : function() {
11970 if (cmd = queryStateCommands[cmd.toLowerCase()])
11971 return cmd.func.call(scope || cmd.scope, ui, value, args);
11972 }
11973 });
11974 };
11975
11976 tinymce.GlobalCommands = new tinymce.CommandManager();
11977})(tinymce);(function(tinymce) {
11978 function processRange(dom, start, end, callback) {
11979 var ancestor, n, startPoint, endPoint, sib;
11980
11981 function findEndPoint(n, c) {
11982 do {
11983 if (n.parentNode == c)
11984 return n;
11985
11986 n = n.parentNode;
11987 } while(n);
11988 };
11989
11990 function process(n) {
11991 callback(n);
11992 tinymce.walk(n, callback, 'childNodes');
11993 };
11994
11995 // Find common ancestor and end points
11996 ancestor = dom.findCommonAncestor(start, end);
11997 startPoint = findEndPoint(start, ancestor) || start;
11998 endPoint = findEndPoint(end, ancestor) || end;
11999
12000 // Process left leaf
12001 for (n = start; n && n != startPoint; n = n.parentNode) {
12002 for (sib = n.nextSibling; sib; sib = sib.nextSibling)
12003 process(sib);
12004 }
12005
12006 // Process middle from start to end point
12007 if (startPoint != endPoint) {
12008 for (n = startPoint.nextSibling; n && n != endPoint; n = n.nextSibling)
12009 process(n);
12010 } else
12011 process(startPoint);
12012
12013 // Process right leaf
12014 for (n = end; n && n != endPoint; n = n.parentNode) {
12015 for (sib = n.previousSibling; sib; sib = sib.previousSibling)
12016 process(sib);
12017 }
12018 };
12019
12020 tinymce.GlobalCommands.add('RemoveFormat', function() {
12021 var ed = this, dom = ed.dom, s = ed.selection, r = s.getRng(1), nodes = [], bm, start, end, sc, so, ec, eo, n;
12022
12023 function findFormatRoot(n) {
12024 var sp;
12025
12026 dom.getParent(n, function(n) {
12027 if (dom.is(n, ed.getParam('removeformat_selector')))
12028 sp = n;
12029
12030 return dom.isBlock(n);
12031 }, ed.getBody());
12032
12033 return sp;
12034 };
12035
12036 function collect(n) {
12037 if (dom.is(n, ed.getParam('removeformat_selector')))
12038 nodes.push(n);
12039 };
12040
12041 function walk(n) {
12042 collect(n);
12043 tinymce.walk(n, collect, 'childNodes');
12044 };
12045
12046 bm = s.getBookmark();
12047 sc = r.startContainer;
12048 ec = r.endContainer;
12049 so = r.startOffset;
12050 eo = r.endOffset;
12051 sc = sc.nodeType == 1 ? sc.childNodes[Math.min(so, sc.childNodes.length - 1)] : sc;
12052 ec = ec.nodeType == 1 ? ec.childNodes[Math.min(so == eo ? eo : eo - 1, ec.childNodes.length - 1)] : ec;
12053
12054 // Same container
12055 if (sc == ec) { // TEXT_NODE
12056 start = findFormatRoot(sc);
12057
12058 // Handle single text node
12059 if (sc.nodeType == 3) {
12060 if (start && start.nodeType == 1) { // ELEMENT
12061 n = sc.splitText(so);
12062 n.splitText(eo - so);
12063 dom.split(start, n);
12064
12065 s.moveToBookmark(bm);
12066 }
12067
12068 return;
12069 }
12070
12071 // Handle single element
12072 walk(dom.split(start, sc) || sc);
12073 } else {
12074 // Find start/end format root
12075 start = findFormatRoot(sc);
12076 end = findFormatRoot(ec);
12077
12078 // Split start text node
12079 if (start) {
12080 if (sc.nodeType == 3) { // TEXT
12081 // Since IE doesn't support white space nodes in the DOM we need to
12082 // add this invisible character so that the splitText function can split the contents
12083 if (so == sc.nodeValue.length)
12084 sc.nodeValue += '\uFEFF'; // Yet another pesky IE fix
12085
12086 sc = sc.splitText(so);
12087 }
12088 }
12089
12090 // Split end text node
12091 if (end) {
12092 if (ec.nodeType == 3) // TEXT
12093 ec.splitText(eo);
12094 }
12095
12096 // If the start and end format root is the same then we need to wrap
12097 // the end node in a span since the split calls might change the reference
12098 // Example: <p><b><em>x[yz<span>---</span>12]3</em></b></p>
12099 if (start && start == end)
12100 dom.replace(dom.create('span', {id : '__end'}, ec.cloneNode(true)), ec);
12101
12102 // Split all start containers down to the format root
12103 if (start)
12104 start = dom.split(start, sc);
12105 else
12106 start = sc;
12107
12108 // If there is a span wrapper use that one instead
12109 if (n = dom.get('__end')) {
12110 ec = n;
12111 end = findFormatRoot(ec);
12112 }
12113
12114 // Split all end containers down to the format root
12115 if (end)
12116 end = dom.split(end, ec);
12117 else
12118 end = ec;
12119
12120 // Collect nodes in between
12121 processRange(dom, start, end, collect);
12122
12123 // Remove invisible character for IE workaround if we find it
12124 if (sc.nodeValue == '\uFEFF')
12125 sc.nodeValue = '';
12126
12127 // Process start/end container elements
12128 walk(ec);
12129 walk(sc);
12130 }
12131
12132 // Remove all collected nodes
12133 tinymce.each(nodes, function(n) {
12134 dom.remove(n, 1);
12135 });
12136
12137 // Remove leftover wrapper
12138 dom.remove('__end', 1);
12139
12140 s.moveToBookmark(bm);
12141 });
12142})(tinymce);
12143(function(tinymce) {
12144 tinymce.GlobalCommands.add('mceBlockQuote', function() {
12145 var ed = this, s = ed.selection, dom = ed.dom, sb, eb, n, bm, bq, r, bq2, i, nl;
12146
12147 function getBQ(e) {
12148 return dom.getParent(e, function(n) {return n.nodeName === 'BLOCKQUOTE';});
12149 };
12150
12151 // Get start/end block
12152 sb = dom.getParent(s.getStart(), dom.isBlock);
12153 eb = dom.getParent(s.getEnd(), dom.isBlock);
12154
12155 // Remove blockquote(s)
12156 if (bq = getBQ(sb)) {
12157 if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR'))
12158 bm = s.getBookmark();
12159
12160 // Move all elements after the end block into new bq
12161 if (getBQ(eb)) {
12162 bq2 = bq.cloneNode(false);
12163
12164 while (n = eb.nextSibling)
12165 bq2.appendChild(n.parentNode.removeChild(n));
12166 }
12167
12168 // Add new bq after
12169 if (bq2)
12170 dom.insertAfter(bq2, bq);
12171
12172 // Move all selected blocks after the current bq
12173 nl = s.getSelectedBlocks(sb, eb);
12174 for (i = nl.length - 1; i >= 0; i--) {
12175 dom.insertAfter(nl[i], bq);
12176 }
12177
12178 // Empty bq, then remove it
12179 if (/^\s*$/.test(bq.innerHTML))
12180 dom.remove(bq, 1); // Keep children so boomark restoration works correctly
12181
12182 // Empty bq, then remote it
12183 if (bq2 && /^\s*$/.test(bq2.innerHTML))
12184 dom.remove(bq2, 1); // Keep children so boomark restoration works correctly
12185
12186 if (!bm) {
12187 // Move caret inside empty block element
12188 if (!tinymce.isIE) {
12189 r = ed.getDoc().createRange();
12190 r.setStart(sb, 0);
12191 r.setEnd(sb, 0);
12192 s.setRng(r);
12193 } else {
12194 s.select(sb);
12195 s.collapse(0);
12196
12197 // IE misses the empty block some times element so we must move back the caret
12198 if (dom.getParent(s.getStart(), dom.isBlock) != sb) {
12199 r = s.getRng();
12200 r.move('character', -1);
12201 r.select();
12202 }
12203 }
12204 } else
12205 ed.selection.moveToBookmark(bm);
12206
12207 return;
12208 }
12209
12210 // Since IE can start with a totally empty document we need to add the first bq and paragraph
12211 if (tinymce.isIE && !sb && !eb) {
12212 ed.getDoc().execCommand('Indent');
12213 n = getBQ(s.getNode());
12214 n.style.margin = n.dir = ''; // IE adds margin and dir to bq
12215 return;
12216 }
12217
12218 if (!sb || !eb)
12219 return;
12220
12221 // If empty paragraph node then do not use bookmark
12222 if (sb != eb || sb.childNodes.length > 1 || (sb.childNodes.length == 1 && sb.firstChild.nodeName != 'BR'))
12223 bm = s.getBookmark();
12224
12225 // Move selected block elements into a bq
12226 tinymce.each(s.getSelectedBlocks(getBQ(s.getStart()), getBQ(s.getEnd())), function(e) {
12227 // Found existing BQ add to this one
12228 if (e.nodeName == 'BLOCKQUOTE' && !bq) {
12229 bq = e;
12230 return;
12231 }
12232
12233 // No BQ found, create one
12234 if (!bq) {
12235 bq = dom.create('blockquote');
12236 e.parentNode.insertBefore(bq, e);
12237 }
12238
12239 // Add children from existing BQ
12240 if (e.nodeName == 'BLOCKQUOTE' && bq) {
12241 n = e.firstChild;
12242
12243 while (n) {
12244 bq.appendChild(n.cloneNode(true));
12245 n = n.nextSibling;
12246 }
12247
12248 dom.remove(e);
12249 return;
12250 }
12251
12252 // Add non BQ element to BQ
12253 bq.appendChild(dom.remove(e));
12254 });
12255
12256 if (!bm) {
12257 // Move caret inside empty block element
12258 if (!tinymce.isIE) {
12259 r = ed.getDoc().createRange();
12260 r.setStart(sb, 0);
12261 r.setEnd(sb, 0);
12262 s.setRng(r);
12263 } else {
12264 s.select(sb);
12265 s.collapse(1);
12266 }
12267 } else
12268 s.moveToBookmark(bm);
12269 });
12270})(tinymce);
12271(function(tinymce) {
12272 tinymce.each(['Cut', 'Copy', 'Paste'], function(cmd) {
12273 tinymce.GlobalCommands.add(cmd, function() {
12274 var ed = this, doc = ed.getDoc();
12275
12276 try {
12277 doc.execCommand(cmd, false, null);
12278
12279 // On WebKit the command will just be ignored if it's not enabled
12280 if (!doc.queryCommandSupported(cmd))
12281 throw 'Error';
12282 } catch (ex) {
12283 if (tinymce.isGecko) {
12284 ed.windowManager.confirm(ed.getLang('clipboard_msg'), function(s) {
12285 if (s)
12286 open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');
12287 });
12288 } else
12289 ed.windowManager.alert(ed.getLang('clipboard_no_support'));
12290 }
12291 });
12292 });
12293})(tinymce);
12294(function(tinymce) {
12295 tinymce.GlobalCommands.add('InsertHorizontalRule', function() {
12296 if (tinymce.isOpera)
12297 return this.getDoc().execCommand('InsertHorizontalRule', false, '');
12298
12299 this.selection.setContent('<hr />');
12300 });
12301})(tinymce);
12302(function() {
12303 var cmds = tinymce.GlobalCommands;
12304
12305 cmds.add(['mceEndUndoLevel', 'mceAddUndoLevel'], function() {
12306 this.undoManager.add();
12307 });
12308
12309 cmds.add('Undo', function() {
12310 var ed = this;
12311
12312 if (ed.settings.custom_undo_redo) {
12313 ed.undoManager.undo();
12314 ed.nodeChanged();
12315 return true;
12316 }
12317
12318 return false; // Run browser command
12319 });
12320
12321 cmds.add('Redo', function() {
12322 var ed = this;
12323
12324 if (ed.settings.custom_undo_redo) {
12325 ed.undoManager.redo();
12326 ed.nodeChanged();
12327 return true;
12328 }
12329
12330 return false; // Run browser command
12331 });
12332})();
diff --git a/public/javascripts/tiny_mce/utils/editable_selects.js b/public/javascripts/tiny_mce/utils/editable_selects.js
index fff4963..fff4963 100755..100644
--- a/public/javascripts/tiny_mce/utils/editable_selects.js
+++ b/public/javascripts/tiny_mce/utils/editable_selects.js
diff --git a/public/javascripts/tiny_mce/utils/form_utils.js b/public/javascripts/tiny_mce/utils/form_utils.js
index c1f1409..9bc2bad 100755..100644
--- a/public/javascripts/tiny_mce/utils/form_utils.js
+++ b/public/javascripts/tiny_mce/utils/form_utils.js
@@ -1,5 +1,5 @@
1/** 1/**
2 * $Id: form_utils.js 673 2008-03-06 13:26:20Z spocke $ 2 * $Id: form_utils.js 1184 2009-08-11 11:47:27Z spocke $
3 * 3 *
4 * Various form utilitiy functions. 4 * Various form utilitiy functions.
5 * 5 *
@@ -13,7 +13,7 @@ function getColorPickerHTML(id, target_form_element) {
13 var h = ""; 13 var h = "";
14 14
15 h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">'; 15 h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';
16 h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>'; 16 h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';
17 17
18 return h; 18 return h;
19} 19}
@@ -50,7 +50,7 @@ function getBrowserHTML(id, target_form_element, type, prefix) {
50 50
51 html = ""; 51 html = "";
52 html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">'; 52 html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';
53 html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '"></span></a>'; 53 html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';
54 54
55 return html; 55 return html;
56} 56}
@@ -92,7 +92,7 @@ function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {
92function getSelectValue(form_obj, field_name) { 92function getSelectValue(form_obj, field_name) {
93 var elm = form_obj.elements[field_name]; 93 var elm = form_obj.elements[field_name];
94 94
95 if (elm == null || elm.options == null) 95 if (elm == null || elm.options == null || elm.selectedIndex === -1)
96 return ""; 96 return "";
97 97
98 return elm.options[elm.selectedIndex].value; 98 return elm.options[elm.selectedIndex].value;
diff --git a/public/javascripts/tiny_mce/utils/mctabs.js b/public/javascripts/tiny_mce/utils/mctabs.js
index 284501e..284501e 100755..100644
--- a/public/javascripts/tiny_mce/utils/mctabs.js
+++ b/public/javascripts/tiny_mce/utils/mctabs.js
diff --git a/public/javascripts/tiny_mce/utils/validate.js b/public/javascripts/tiny_mce/utils/validate.js
index cde4c97..cde4c97 100755..100644
--- a/public/javascripts/tiny_mce/utils/validate.js
+++ b/public/javascripts/tiny_mce/utils/validate.js