diff --git a/www/extras/tinymce2/docs/option_display_tab_class.html b/www/extras/tinymce2/docs/option_display_tab_class.html new file mode 100644 index 000000000..7885097cc --- /dev/null +++ b/www/extras/tinymce2/docs/option_display_tab_class.html @@ -0,0 +1,38 @@ + + + +Option: display_tab_class + + + + +
+

Option: display_tab_class

+
+ +
+

+ This option is useful when TinyMCE is used within tabs in MSIE. This property is needed since MSIE has a bug where it's impossible to retrive the width/height on elements like images while it's hidden using display:none. So use this property to define the class name that is used to hide a specific tab, this will help TinyMCE to display the tab while getting the image data. +

+ +
+ +

Example of usage of the display_tab_class option:

+
+
+tinyMCE.init({
+	...
+	display_tab_class : "showTab"
+});
+
+
+
+ + + + + diff --git a/www/extras/tinymce2/docs/option_hidden_tab_class.html b/www/extras/tinymce2/docs/option_hidden_tab_class.html new file mode 100644 index 000000000..2708636ec --- /dev/null +++ b/www/extras/tinymce2/docs/option_hidden_tab_class.html @@ -0,0 +1,38 @@ + + + +Option: hidden_tab_class + + + + +
+

Option: hidden_tab_class

+
+ +
+

+ This option is useful when TinyMCE is used within tabs in MSIE. This property is needed since MSIE has a bug where it's impossible to retrive the width/height on elements like images while it's hidden using display:none. So use this property to define the class name that is used to hide a specific tab, this will help TinyMCE to display the tab while getting the image data. +

+ +
+ +

Example of usage of the hidden_tab_class option:

+
+
+tinyMCE.init({
+	...
+	hidden_tab_class : "hideTab"
+});
+
+
+
+ + + + + diff --git a/www/extras/tinymce2/docs/option_strict_loading_mode.html b/www/extras/tinymce2/docs/option_strict_loading_mode.html new file mode 100644 index 000000000..e682c7ea0 --- /dev/null +++ b/www/extras/tinymce2/docs/option_strict_loading_mode.html @@ -0,0 +1,38 @@ + + + + Option: strict_loading_mode + + + + +
+

Option: strict_loading_mode

+
+ +
+

+ This option will force TinyMCE to load script using a DOM insert method instead of document.write on Gecko browsers. Since this results in asynchronous script loading a build in synchronized will ensure that themes, plugins and language packs files are loaded in the correct order. This will on the otherhand make the initialization procedure of TinyMCE a bit slower thats why this isn't the default behavior. So this option is set to true by default if the document content type is application/xhtml+xml. +

+ +
+ +

Example of usage of the strict_loading_mode option:

+
+
+tinyMCE.init({
+	...
+	strict_loading_mode : true
+});
+
+
+
+ + + + + diff --git a/www/extras/tinymce2/docs/option_theme_advanced_source_editor_wrap.html b/www/extras/tinymce2/docs/option_theme_advanced_source_editor_wrap.html new file mode 100644 index 000000000..6271a79d6 --- /dev/null +++ b/www/extras/tinymce2/docs/option_theme_advanced_source_editor_wrap.html @@ -0,0 +1,38 @@ + + + +Option: theme_advanced_source_editor_wrap + + + + +
+

Option: theme_advanced_source_editor_wrap

+
+ +
+

+ This option enables you to force word wrap for the source editor, this option is set to true by default. +

+ +
+ +

Example of usage of the theme_advanced_source_editor_wrap option:

+
+
+tinyMCE.init({
+	...
+	theme_advanced_source_editor_wrap : false
+});
+
+
+
+ + + + + diff --git a/www/extras/tinymce2/docs/plugin_layer.html b/www/extras/tinymce2/docs/plugin_layer.html new file mode 100644 index 000000000..e644bfd2f --- /dev/null +++ b/www/extras/tinymce2/docs/plugin_layer.html @@ -0,0 +1,46 @@ + + + +Plugin: layer + + + + +
+

Plugin: layer

+
+ +
+

Adds a layer suport to TinyMCE by making it possible to create/remove and z-index block elements.

+ +

These are the possible button control that this plugin contains: insertlayer,moveforward,movebackward,absolute

+ +

Installation Instructions

+

+

+

+

Initialization Example

+

+

+
+tinyMCE.init({
+	theme : "advanced",
+	mode : "textareas",
+	plugins : "layer",
+	theme_advanced_buttons3_add : "insertlayer,moveforward,movebackward,absolute"
+});
+
+

+
+ + + + + diff --git a/www/extras/tinymce2/docs/plugin_style.html b/www/extras/tinymce2/docs/plugin_style.html new file mode 100644 index 000000000..7214399d8 --- /dev/null +++ b/www/extras/tinymce2/docs/plugin_style.html @@ -0,0 +1,303 @@ + + + +Plugin: style + + + + +
+

Plugin: style

+
+ +
+

Adds CSS style editing support to TinyMCE, this will enable you to edit allmost any CSS style property in a visual way.

+ +

Installation Instructions

+

+

+

+

Initialization Example

+

+

+
+tinyMCE.init({
+	theme : "advanced",
+	mode : "textareas",
+	plugins : "style",
+	theme_advanced_buttons3_add : "styleprops"
+});
+
+

+
+ +

Options

+

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[style_font]Semicolon separated list of select box option name/values. Default: Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;Times New Roman, Times, serif=Times New Roman, Times, serif;Courier New, Courier, mono=Courier New, Courier, mono;Times New Roman, Times, serif=Times New Roman, Times, serif;Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif
[style_font_size]Semicolon separated list of select box option name/values. In format key1=value1;key2=value2;..
[style_font_size_measurement]Semicolon separated list of select box option name/values.
[style_text_case]Semicolon separated list of select box option name/values.
[style_font_weight]Semicolon separated list of select box option name/values.
[style_font_style]Semicolon separated list of select box option name/values.
[style_font_variant]Semicolon separated list of select box option name/values.
[style_font_line_height]Semicolon separated list of select box option name/values.
[style_font_line_height_measurement]Semicolon separated list of select box option name/values.
[style_background_attachment]Semicolon separated list of select box option name/values.
[style_background_repeat]Semicolon separated list of select box option name/values.
[style_background_hpos_measurement]Semicolon separated list of select box option name/values.
[style_background_vpos_measurement]Semicolon separated list of select box option name/values.
[style_background_hpos]Semicolon separated list of select box option name/values.
[style_background_vpos]Semicolon separated list of select box option name/values.
[style_wordspacing]Semicolon separated list of select box option name/values.
[style_wordspacing_measurement]Semicolon separated list of select box option name/values.
[style_letterspacing]Semicolon separated list of select box option name/values.
[style_letterspacing_measurement]Semicolon separated list of select box option name/values.
[style_vertical_alignment]Semicolon separated list of select box option name/values.
[style_text_align]Semicolon separated list of select box option name/values.
[style_whitespace]Semicolon separated list of select box option name/values.
[style_display]Semicolon separated list of select box option name/values.
[style_text_indent_measurement]Semicolon separated list of select box option name/values.
[style_box_width_measurement]Semicolon separated list of select box option name/values.
[style_box_height_measurement]Semicolon separated list of select box option name/values.
[style_float]Semicolon separated list of select box option name/values.
[style_clear]Semicolon separated list of select box option name/values.
[style_padding_left_measurement]Semicolon separated list of select box option name/values.
[style_padding_top_measurement]Semicolon separated list of select box option name/values.
[style_padding_bottom_measurement]Semicolon separated list of select box option name/values.
[style_padding_right_measurement]Semicolon separated list of select box option name/values.
[style_margin_left_measurement]Semicolon separated list of select box option name/values.
[style_margin_top_measurement]Semicolon separated list of select box option name/values.
[style_margin_bottom_measurement]Semicolon separated list of select box option name/values.
[style_margin_right_measurement]Semicolon separated list of select box option name/values.
[style_border_style_top]Semicolon separated list of select box option name/values.
[style_border_style_right]Semicolon separated list of select box option name/values.
[style_border_style_bottom]Semicolon separated list of select box option name/values.
[style_border_style_left]Semicolon separated list of select box option name/values.
[style_border_width_top]Semicolon separated list of select box option name/values.
[style_border_width_right]Semicolon separated list of select box option name/values.
[style_border_width_bottom]Semicolon separated list of select box option name/values.
[style_border_width_left]Semicolon separated list of select box option name/values.
[style_border_width_top_measurement]Semicolon separated list of select box option name/values.
[style_border_width_right_measurement]Semicolon separated list of select box option name/values.
[style_border_width_bottom_measurement]Semicolon separated list of select box option name/values.
[style_border_width_left_measurement]Semicolon separated list of select box option name/values.
[style_list_type]Semicolon separated list of select box option name/values.
[style_list_position]Semicolon separated list of select box option name/values.
[style_positioning_type]Semicolon separated list of select box option name/values.
[style_positioning_visibility]Semicolon separated list of select box option name/values.
[style_positioning_width_measurement]Semicolon separated list of select box option name/values.
[style_positioning_height_measurement]Semicolon separated list of select box option name/values.
[style_positioning_overflow]Semicolon separated list of select box option name/values.
[style_positioning_placement_top_measurement]Semicolon separated list of select box option name/values.
[style_positioning_placement_right_measurement]Semicolon separated list of select box option name/values.
[style_positioning_placement_bottom_measurement]Semicolon separated list of select box option name/values.
[style_positioning_placement_left_measurement]Semicolon separated list of select box option name/values.
[style_positioning_clip_top_measurement]Semicolon separated list of select box option name/values.
[style_positioning_clip_right_measurement]Semicolon separated list of select box option name/values.
[style_positioning_clip_bottom_measurement]Semicolon separated list of select box option name/values.
[style_positioning_clip_left_measurement]Semicolon separated list of select box option name/values.
+

+
+ + + + + diff --git a/www/extras/tinymce2/docs/tinymce_api/GLOBALS.html b/www/extras/tinymce2/docs/tinymce_api/GLOBALS.html new file mode 100644 index 000000000..96d0b987c --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/GLOBALS.html @@ -0,0 +1,267 @@ + + + + + +GLOBALS + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class GLOBALS

+
Object
+   |
+   +--GLOBALS
+
+ + +
+
+ +
class + GLOBALS + + +
+ +
+ + + + + + + + + + + + + + + + + + +  + + + + + + + + + + + + + + + + +
+Method Summary
+ + <static> void + + + + + TinyMCE_Menu() + +
+            + Constructor for the menu layer class. +
+ + + +

+ + + + + + + + + + + + + + + + + +


+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

TinyMCE_Menu

+
<static> void TinyMCE_Menu()
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Cleanup.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Cleanup.html new file mode 100644 index 000000000..a0f7741db --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Cleanup.html @@ -0,0 +1,675 @@ + + + + + +TinyMCE_Cleanup + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_Cleanup

+
Object
+   |
+   +--TinyMCE_Cleanup
+
+ + +
+
+ +
class + TinyMCE_Cleanup + + +
+ +

+ Defined in TinyMCE_Cleanup.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_Cleanup + + () + +
+             + TinyMCE_Cleanup class. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  void + + + + + addRuleStr(<string> s) + +
+            + Adds a cleanup rule string, for TinyMCE_Cleanup.prototype.example = a;[href|name|title=title|class=class1?class2?class3]. +
+ +  string + + + + + formatHTML(<string> h) + +
+            + Applies source formatting/indentation on the specified HTML string. +
+ +  void + + + + + init(<Array> s) + +
+            + Initializes the cleanup engine with the specified config. +
+ +  Array + + + + + parseRuleStr(<string> s) + +
+            + Parses a cleanup rule string, for TinyMCE_Cleanup.prototype.example = a;[href|name|title=title|class=class1?class2?class3]. +
+ +  string + + + + + serializeNodeAsHTML(<HTMLNode> n) + +
+            + Serializes the specified node as a XHTML string. +
+ +  string + + + + + serializeNodeAsXML(<HTMLNode> n) + +
+            + Serializes the specified node as a HTML string. +
+ +  string + + + + + split(<RegEx> re, <string> s) + +
+            + Splits the specified string and removed empty chunks. +
+ +  string + + + + + xmlEncode(<string> s) + +
+            + XML Encodes the specified string based on configured entity encoding. +
+ + + +

+ + + + + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_Cleanup

+
TinyMCE_Cleanup()
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

addRuleStr

+
void addRuleStr(<string> s)
+ + + + + + + + + + + + + + + +
+ + +

formatHTML

+
string formatHTML(<string> h)
+ + + + + + + + + + + + + + + + + +
+ + +

init

+
void init(<Array> s)
+ + + + + + + + + + + + + + + +
+ + +

parseRuleStr

+
Array parseRuleStr(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

serializeNodeAsHTML

+
string serializeNodeAsHTML(<HTMLNode> n)
+ + + + + + + + + + + + + + + + + +
+ + +

serializeNodeAsXML

+
string serializeNodeAsXML(<HTMLNode> n)
+ + + + + + + + + + + + + + + + + +
+ + +

split

+
string split(<RegEx> re, <string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

xmlEncode

+
string xmlEncode(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Control.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Control.html new file mode 100644 index 000000000..4baff31a2 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Control.html @@ -0,0 +1,1387 @@ + + + + + +TinyMCE_Control + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_Control

+
Object
+   |
+   +--TinyMCE_Control
+
+ + +
+
+ +
class + TinyMCE_Control + + +
+ +

+ Defined in TinyMCE_Control.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field Summary
+  Objectcleanup +
+           
+  ObjecthasMouseMoved +
+           
+  ObjectisTinyMCE_Control +
+           
+  Objectplugins +
+           
+  Objectselection +
+           
+  Objectsettings +
+           
+  Objectshortcuts +
+           
+  ObjectundoRedo +
+           
+  ObjectundoRedoLevel +
+           
+   + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_Control + + (<Array> settings) + +
+             + This is the TinyMCE editor control instance class. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  void + + + + + addPlugin(<string> n, p) + +
+            + Adds a plugin to the editor instance. +
+ +  boolean + + + + + addShortcut(<string> m, <Object> k, <string> d, <string> cmd, <boolean> ui, <Object> va) + +
+            + Adds a keyboard shortcut to a specific command. +
+ +  void + + + + + autoResetDesignMode() + +
+            + Auto resets the design mode of the document if it gets lost. +
+ +  Object + + + + + execCommand(<string> command, <boolean> user_interface, <mixed> value) + +
+            + Executes a command on the current instance. +
+ +  HTMLElement + + + + + getBody() + +
+            + Returns the body element of a editor instance. +
+ +  DOMDocument + + + + + getDoc() + +
+            + Returns the DOM document of a editor instance. +
+ +  HTMLElement + + + + + getFocusElement() + +
+            + Returns the currently selected element. +
+ +  DOMRange + + + + + getRng() + +
+            + Returns the browsers selections first range instance. +
+ +  DOMSelection + + + + + getSel() + +
+            + Returns the browsers selection instance. +
+ +  Window + + + + + getWin() + +
+            + Returns the window of a editor instance. +
+ +  boolean + + + + + handleShortcut(<DOMEvent> e) + +
+            + Executes shortcuts based on the event information. +
+ +  boolean + + + + + hasPlugin(<string> n) + +
+            + Returns true/false if the instance has the current plugin available. +
+ +  boolean + + + + + isDirty() + +
+            + Returns true/false if the editor instance is dirty or not. +
+ +  boolean + + + + + isHidden() + +
+            + Returns if the instance is hidden or not. +
+ +  boolean + + + + + queryCommandState(<string> c) + +
+            + Returns a command specific state, for example if bold is enabled or not. +
+ +  mixed + + + + + queryCommandValue(<string> c) + +
+            + Returns a command specific value, for example the current font size. +
+ +  void + + + + + repaint() + +
+            + Repaints the editarea in Gecko browsers. +
+ +  void + + + + + setBaseHREF(<string> u) + +
+            + Sets the base href url of the current document instance. +
+ +  void + + + + + switchSettings() + +
+            + Switches the global TinyMCE settings to the current instance settings. +
+ +  void + + + + + triggerSave(<boolean> skip_cleanup, <boolean> skip_callback) + +
+            + Moves the contents from the TinyMCE editor control instance to the hidden textarea + that got replaced with TinyMCE. +
+ + + +

+ + + + + + + + + + +
Field Detail
+ + + +

cleanup

+
Object cleanup
+ +
+ + +

hasMouseMoved

+
Object hasMouseMoved
+ +
+ + +

isTinyMCE_Control

+
Object isTinyMCE_Control
+ +
+ + +

plugins

+
Object plugins
+ +
+ + +

selection

+
Object selection
+ +
+ + +

settings

+
Object settings
+ +
+ + +

shortcuts

+
Object shortcuts
+ +
+ + +

undoRedo

+
Object undoRedo
+ +
+ + +

undoRedoLevel

+
Object undoRedoLevel
+ +
+ + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_Control

+
TinyMCE_Control(<Array> settings)
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

addPlugin

+
void addPlugin(<string> n, p)
+ + + + + + + + + + + + + + + +
+ + +

addShortcut

+
boolean addShortcut(<string> m, <Object> k, <string> d, <string> cmd, <boolean> ui, <Object> va)
+ + + + + + + + + + + + + + + + + +
+ + +

autoResetDesignMode

+
void autoResetDesignMode()
+ + + + + + + + + + + + + +
+ + +

execCommand

+
Object execCommand(<string> command, <boolean> user_interface, <mixed> value)
+ + + + + + + + + + + + + + + +
+ + +

getBody

+
HTMLElement getBody()
+ + + + + + + + + + + + + + + +
+ + +

getDoc

+
DOMDocument getDoc()
+ + + + + + + + + + + + + + + +
+ + +

getFocusElement

+
HTMLElement getFocusElement()
+ + + + + + + + + + + + + + + + + +
+ + +

getRng

+
DOMRange getRng()
+ + + + + + + + + + + + + + + + + +
+ + +

getSel

+
DOMSelection getSel()
+ + + + + + + + + + + + + + + + + +
+ + +

getWin

+
Window getWin()
+ + + + + + + + + + + + + + + +
+ + +

handleShortcut

+
boolean handleShortcut(<DOMEvent> e)
+ + + + + + + + + + + + + + + + + +
+ + +

hasPlugin

+
boolean hasPlugin(<string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

isDirty

+
boolean isDirty()
+ + + + + + + + + + + + + + + +
+ + +

isHidden

+
boolean isHidden()
+ + + + + + + + + + + + + + + +
+ + +

queryCommandState

+
boolean queryCommandState(<string> c)
+ + + + + + + + + + + + + + + + + +
+ + +

queryCommandValue

+
mixed queryCommandValue(<string> c)
+ + + + + + + + + + + + + + + + + +
+ + +

repaint

+
void repaint()
+ + + + + + + + + + + + + +
+ + +

setBaseHREF

+
void setBaseHREF(<string> u)
+ + + + + + + + + + + + + + + +
+ + +

switchSettings

+
void switchSettings()
+ + + + + + + + + + + + + +
+ + +

triggerSave

+
void triggerSave(<boolean> skip_cleanup, <boolean> skip_callback)
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Engine.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Engine.html new file mode 100644 index 000000000..60845b3bc --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Engine.html @@ -0,0 +1,6390 @@ + + + + + +TinyMCE_Engine + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_Engine

+
Object
+   |
+   +--TinyMCE_Engine
+
+ + +
+
+ +
class + TinyMCE_Engine + + +
+ +

+ Defined in TinyMCE_Engine.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field Summary
+  ObjectbuttonMap +
+           
+  Objectconfigs +
+           
+  ObjectcurrentConfig +
+           
+  ObjectdialogCounter +
+           
+  ObjecteventHandlers +
+           
+  ObjectidCounter +
+           
+  Objectinstances +
+           
+  ObjectisGecko +
+           
+  ObjectisLoaded +
+           
+  ObjectisMac +
+           
+  ObjectisMSIE +
+           
+  ObjectisMSIE5 +
+           
+  ObjectisMSIE5_0 +
+           
+  ObjectisNS7 +
+           
+  ObjectisNS71 +
+           
+  ObjectisOpera +
+           
+  ObjectisSafari +
+           
+  ObjectloadedFiles +
+           
+  ObjectloadedPlugins +
+           
+  ObjectmajorVersion +
+           
+  Objectmenus +
+           
+  ObjectminorVersion +
+           
+  Objectplugins +
+           
+  ObjectreleaseDate +
+           
+  ObjectswitchClassCache +
+           
+  Objectthemes +
+           
+  ObjectwindowArgs +
+           
+   + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_Engine + + () + +
+             + Core engine class for TinyMCE, a instance of this class is available as a global called tinyMCE. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  HTMLElement + + + + + _getElementById(<string> i<DOMDocument> d, d) + +
+            + Returns a element by id, this will also search the form names to match the id. +
+ +  void + + + + + _removeInternal(<DOMNode> n) + +
+            + Removes any internal content inserted by regexps. +
+ +  Object + + + + + accessibleEventHandler(<DOMEvent> e) + +
+            + Accessibility handler that gets executed when the user hits a key in a select element. +
+ +  void + + + + + addButtonMap(<string> m) + +
+            + Adds a list of buttons available in the tiled button image used by the button_tile_map option. +
+ +  string + + + + + addCSSClass(<HTMLElement> e, c, b) + +
+            + Adds a CSS class to the specified element. +
+ +  void + + + + + addEvent(<HTMLElement> o, <string> n, <function> h) + +
+            + Adds a event handler function to the specified object. +
+ +  void + + + + + addEventHandlers(<inst> inst) + +
+            + Adds the handleEvent function to the specified editor instance. +
+ +  void + + + + + addMCEControl(<HTMLElement> replace_element, <string> form_element_name, <DOMDocument> target_document) + +
+            + Adds a TinyMCE editor control instance to a specific form element. +
+ +  void + + + + + addMenu(<string> n, <TinyMCE_Menu> m) + +
+            + Adds a floating menu instance to TinyMCE. +
+ +  void + + + + + addPlugin(n, <TinyMCE_Plugin> p) + +
+            + Adds the specified plugin to the list of loaded plugins, this will also setup the baseURL + property of the plugin. +
+ +  Object + + + + + addSelectAccessibility(<DOMEvent> e, <HTMLElement> s, <DOMWindow> w) + +
+            + Adds accessibility keydown handler to the specified select element. +
+ +  void + + + + + addTheme(&l<TinyMCE_Theme> t;string> n, t) + +
+            + Adds the specified theme in to the list of loaded themes. +
+ +  void + + + + + addToLang(<string> prefix, <Array> ar) + +
+            + Adds language items to the global language array. +
+ +  string + + + + + applyTemplate(<string> h, <Array> as) + +
+            + Replaces language, args and settings variables in a HTML string. +
+ +  boolean + + + + + callFunc(<<<Array> a href="TinyMCE_Control.html">TinyMCE_Control> ins, <string> p, <string> n, <int> m, a) + +
+            + Executes callback chain. +
+ +  void + + + + + cancelEvent(<DOMEvent> e) + +
+            + Cancels the specified event, this will disable the event from be passed to other listeners in event chain. +
+ +  void + + + + + cleanupAnchors(<DOMDocument> doc) + +
+            + Moves the contents of a anchor outside and after the anchor. +
+ +  string + + + + + cleanupEventStr(<string> s) + +
+            + Removes MSIE 5.5 specific event wrapper function form a event string. +
+ +  string + + + + + cleanupHTMLCode(<string> s) + +
+            + Makes some preprocessing cleanup routines on the specified HTML string. +
+ +  Array + + + + + clearArray(a) + +
+            + Returns a cleared array, since some external libraries tend to extend the Array core object + arrays needs to be cleaned from these extended functions. +
+ +  void + + + + + closeWindow(<DOMWindow> win) + +
+            + Closes the specified window. +
+ +  void + + + + + compressStyle(<Array> ar, <string> pr, <string> sf, <string> res) + +
+            + Compresses larger styles into a smaller. +
+ +  void + + + + + confirmAdd(<DOMEvent> e, <Array> settings) + +
+            + Displays a confirm dialog when a user clicks/focus a textarea that is to be converted into + a TinyMCE instance. +
+ +  string + + + + + convertAbsoluteURLToRelativeURL(<string> base_url, <string> url_to_relative) + +
+            + Converts an absolute path to relative path. +
+ +  void + + + + + convertAllRelativeURLs(<HTMLElement> body) + +
+            + Converts all img and a element URLs to absolute URLs. +
+ +  void + + + + + convertFontsToSpans(<DOMDocument> doc) + +
+            + Convers fonts to spans in the specified document. +
+ +  string + + + + + convertHexToRGB(<string> s) + +
+            + Returns a rgb(n,n,n) string from a hexadecimal value. +
+ +  string + + + + + convertRelativeToAbsoluteURL(<string> base_url, <string> relative_url) + +
+            + Converts an relative path to absolute path. +
+ +  string + + + + + convertRGBToHex(<string> s, <boolean> k) + +
+            + Returns a hexadecimal version of the specified rgb(1,2,3) string. +
+ +  void + + + + + convertSpansToFonts(<DOMDocument> doc) + +
+            + Converts span elements to font elements in the specified document instance. +
+ +  string + + + + + convertURL(<string> url, <HTMLElement> node, <boolean> on_save) + +
+            + Converts the specified URL based in TinyMCE configuration settings. +
+ +  void + + + + + debug() + +
+            + Debugs the specified message to a screen. +
+ +  Object + + + + + dispatchCallback(<TinyMCE_Control> i, <string> p, <string> n) + +
+            + Dispatches the specified callback on all options, plugins and themes. +
+ +  string + + + + + entityDecode(<string> s) + +
+            + HTML entity decode a string, replaces < with <. +
+ +  object + + + + + evalFunc(<string> f, <int> idx, <Array> a) + +
+            + Evaluates the specified function and uses the array of arguments. +
+ +  void + + + + + execCommand(<string> command, <boolean> user_interface, <object> value) + +
+            + Executes a command on the selected or last selected TinyMCE editor control instance. +
+ +  Object + + + + + execCommandCallback(<TinyMCE_Control> i, <string> p, <string> n) + +
+            + Executes the specified execcommand callback on all options, plugins and themes. +
+ +  void + + + + + execInstanceCommand(<string> editor_id, <string> command, <boolean> user_interface, <object> value, <boolean> focus) + +
+            + Executes a command on a specific editor instance by id. +
+ +  Object + + + + + executeCallback(<TinyMCE_Control> i, <string> p, <string> n) + +
+            + Executes the specified callback on all options, plugins and themes. +
+ +  Array + + + + + explode(<string> d, <string> s) + +
+            + Splits a string by the specified delimiter and skips any empty items. +
+ +  Object + + + + + extend(<Object> p, <Object> np) + +
+            + Extends the specified prototype with new methods. +
+ +  string + + + + + fixGeckoBaseHREFBug(<boolean> m, <HTMLElement> e, <string> h) + +
+            + Fixes a Gecko specific bug where href, src attribute values gets converted incorrectly + when inserted into editor. +
+ +  TinyMCE_ElementPosition + + + + + getAbsPosition(<HTMLNode> n) + +
+            + Returns the absolute x, y position of a node. +
+ +  string + + + + + getAttrib(<HTMLElement> elm, <string> name, <string> default_value) + +
+            + Returns the attribute value of a element or the default value if it wasn't found. +
+ +  string + + + + + getButtonHTML(<string> id, <string> lang, <string> img, <string> cmd, <string> ui, <string> val) + +
+            + Returns the HTML code for a normal button control. +
+ +  string + + + + + getContent(<string> editor_id) + +
+            + Returns the HTML contents of the specified editor instance id. +
+ +  string + + + + + getControlHTML(<string> c) + +
+            + Returns the HTML for the specified control this will loop through + the theme and all plugins inorder to find the control. +
+ +  Array + + + + + getCSSClasses(<string> editor_id, <DOMDocument> doc) + +
+            + Returns a array of CSS classes that is available in a document. +
+ +  string + + + + + getEditorId(<string> form_element) + +
+            + Returns the editor instance id of a specific form element. +
+ +  HTMLElement + + + + + getElementByAttributeValue(<HTMLElement> n, <string> e, <string> a, <string> v) + +
+            + Returns a element by a specific attribute and it's value. +
+ +  Array + + + + + getElementsByAttributeValue(<HTMLElement> n, <string> e, <string> a, <string> v) + +
+            + Returns a element array by a specific attribute and it's value. +
+ +  TinyMCE_Control + + + + + getInstanceById(<string> editor_id) + +
+            + Returns a TinyMCE editor instance by the specified editor id or null if it wasn't found. +
+ +  object + + + + + getLang(<string> name, <string> default_value, <boolean> parse_entities, <Array> va) + +
+            + Returns a language variable value from the language packs. +
+ +  Array + + + + + getNodeTree(&l<int> t;HTMLNode> n, <Array> na, t, <string> nn) + +
+            + Returns a array of nodes selected retrived from the child nodes of the specified node. +
+ +  string + + + + + getOuterHTML(<HTMLElement> e) + +
+            + Returns the outer HTML of a element, this uses the outerHTML + property in MSIE and Opera and a workaround for Gecko. +
+ +  object + + + + + getParam(<string> name, <string> default_value, <boolean> strip_whitespace, <string> split_chr) + +
+            + Returns a specific configuration setting or the default value if it wasn't found. +
+ +  HTMLElement + + + + + getParentBlockElement(<HTMLNode> n) + +
+            + Returns the first block element parent of the specified node. +
+ +  HTMLElement + + + + + getParentElement(<HTMLNode> node, <string> names, <string> attrib_name, <string> attrib_value) + +
+            + Returns the parent element of the specified node based on the search criteria. +
+ +  DOMNode + + + + + getParentNode(<DOMNode> n, <function> f) + +
+            + Returns a node by the specified selector function. +
+ +  string + + + + + getVisualAidClass(<string> class_name, <boolean> state) + +
+            + Returns the visual aid class string, this will add/remove the visual aid class. +
+ +  Object + + + + + getWindowArg(<string> n, d) + +
+            + Returns the window argument to be passed to TinyMCE popup. +
+ +  boolean + + + + + handleEvent(<DOMEvent> e) + +
+            + Event handler function that gets executed each time a event occurs in a TinyMCE editor control instance. +
+ +  void + + + + + handleVisualAid(<HTMLElement> el, <boolean> deep, <boolean> state, <TinyMCE_Control> inst, skip_dispatch) + +
+            + Adds visual aid classes to all elements that need them recursive in the DOM tree. +
+ +  boolean + + + + + hasMenu(<string> n) + +
+            + Checks if the specified menu by name is added to TinyMCE. +
+ +  boolean + + + + + hasPlugin(<string> n) + +
+            + Returns true/false if the specified plugin is loaded or not. +
+ +  boolean + + + + + hasTheme(<string> n) + +
+            + Returns true/false if the specified theme is loaded or not. +
+ +  void + + + + + importCSS(<DOMDocument> doc, <string> css) + +
+            + Imports a CSS file into a allready loaded document. +
+ +  void + + + + + importPluginLanguagePack(<string> name, <string> valid_languages) + +
+            + Loads a plugin specific language pack. +
+ +  void + + + + + importThemeLanguagePack(<string> name) + +
+            + Loads a theme specific language pack. +
+ +  void + + + + + init(settings) + +
+            + Initializes TinyMCE with the specific configuration settings. +
+ +  void + + + + + insertAfter(<HTMLNode> n, <HTMLNode> r) + +
+            + Inserts a node after the specific node. +
+ +  boolean + + + + + isBlockElement(<HTMLNode> n) + +
+            + Returns true/false if the specified node is a block element or not. +
+ +  boolean + + + + + isInstance(<object> o) + +
+            + Returns true/false if a specific object is a TinyMCE_Control instance or not. +
+ +  void + + + + + loadCSS(<string> url) + +
+            + Loads the specified CSS by writing the a link tag to the current page. +
+ +  void + + + + + loadPlugin(<string> n, <string> u) + +
+            + Load plugin from external URL. +
+ +  void + + + + + loadScript(<string> url) + +
+            + Loads the specified script by writing the a script tag to the current page. +
+ +  HTMLElement + + + + + nextNode(<HTMLNode> e, <string> n) + +
+            + Finds any element after the current one by name. +
+ +  boolean + + + + + onLoad() + +
+            + Gets executed when the page loads or get intitialized. +
+ +  void + + + + + onMouseMove() + +
+            + Mouse move handler function, this will be executed each time + the mouse is moved within a editor instance. +
+ +  void + + + + + openWindow(<Array> template, <Array> args) + +
+            + Opens a popup window based in the specified input data. +
+ +  Array + + + + + parseStyle(<string> str) + +
+            + Parses the specified HTML style data. +
+ +  TinyMCE_URL_Item + + + + + parseURL(<string> url_str) + +
+            + Parses a URL in to its diffrent components. +
+ +  HTMLElement + + + + + prevNode(<HTMLNode> e, <string> n) + +
+            + Finds any previous element by name. +
+ +  boolean + + + + + queryInstanceCommandState(<string> editor_id, <string> command) + +
+            + Queries a command state for a specific command on a specific editor instance. +
+ +  object + + + + + queryInstanceCommandValue(<string> editor_id, <string> command) + +
+            + Queries a command value for a specific command on a specific editor instance. +
+ +  string + + + + + regexpReplace(<string> in_str, <string> reg_exp, <string> replace_str, opts) + +
+            + Regexp replaces the contents of a string. +
+ +  string + + + + + removeCSSClass(<HTMLElement> e, c) + +
+            + Removes the specified CSS class from the element. +
+ +  void + + + + + removeMCEControl(<string> editor_id) + +
+            + Removes a TinyMCE editor control instance by id. +
+ +  void + + + + + removeTinyMCEFormElements(<HTMLElement> form_obj) + +
+            + Removes/disables TinyMCE built in form elements such as select boxes for font sizes etc. +
+ +  void + + + + + renameElement(<HTMLElement> e, <string> n, <DOMDocument> d) + +
+            + Renames the specified element to the specified name. +
+ +  string + + + + + replaceVar(<string> h, <string> r, <string> v) + +
+            + Replaces a specific variable in the string with a nother string. +
+ +  void + + + + + resetForm(<int> form_index) + +
+            + Resets a forms TinyMCE instances based on form index. +
+ +  Array + + + + + selectNodes(<DOMNode> n, <function> f, <Array> a) + +
+            + Returns a array of nodes when the specified function matches a node. +
+ +  string + + + + + serializeStyle(<Array> ar) + +
+            + Serializes the specified style item name/value array into a HTML string. +
+ +  string + + + + + serializeURL(<TinyMCE_URL_Item> up) + +
+            + Serializes the specified URL object into a string. +
+ +  void + + + + + setAttrib(<HTMLElement> element, <string> name, <string> value, <boolean> fix_value) + +
+            + Sets the attribute value for a specific attribute. +
+ +  void + + + + + setContent(<string> h) + +
+            + Sets the HTML contents of the selected editor instance. +
+ +  void + + + + + setInnerHTML(<HTMLElement> e, <string> h) + +
+            + Sets the innerHTML property of a element, this function also + fixes a MSIE bug where the first comment is removed. +
+ +  void + + + + + setOuterHTML(<HTMLElement> e, <string> h) + +
+            + Sets the outer HTML of a element, this uses the outerHTML + property in MSIE and Opera and a workaround for Gecko. +
+ +  void + + + + + setPluginBaseURL(<string> n, <string> u) + +
+            + Sets the baseURL of the specified plugin, this is useful if the plugin is loaded from + a external location. +
+ +  void + + + + + setStyleAttrib(<HTMLElement> elm, <string> name, <string> value) + +
+            + Sets a style attribute item value. +
+ +  void + + + + + setupContent(<string> editor_id) + +
+            + Setups the contents of TinyMCE editor instance and fills it with contents. +
+ +  void + + + + + setWindowArg(<string> n, <string> v) + +
+            + Sets the window argument to be passed to TinyMCE popup. +
+ +  string + + + + + storeAwayURLs(<string> s) + +
+            + Stores away the src and href attribute values in separate mce_src and mce_href attributes. +
+ +  void + + + + + submitPatch() + +
+            + Piggyback onsubmit event handler function, this will remove/hide the TinyMCE specific form elements + call triggerSave to fill the textarea with the correct contents then call the old piggy backed event handler. +
+ +  void + + + + + switchClass(<HTMLElement> ei, <string> c) + +
+            + Switches the CSS class of the specified element. +
+ +  void + + + + + triggerNodeChange(<boolean> focus, <boolean> setup_content) + +
+            + Triggers a nodeChange event to every theme and plugin. +
+ +  void + + + + + triggerSave(<boolean> skip_cleanup, <boolean> skip_callback) + +
+            + Moves the contents from a TinyMCE editor control instance to the hidden textarea + that got replaced with TinyMCE. +
+ +  string + + + + + trim(<string> s) + +
+            + Removes all prefix, suffix whitespace of a string. +
+ +  void + + + + + unloadHandler() + +
+            + Unload document event handler function. +
+ +  void + + + + + updateContent(<string> form_element_name) + +
+            + Moves the contents from the hidden textarea to the editor that gets inserted. +
+ +  string + + + + + xmlEncode(<string> s) + +
+            + Encodes the string to raw XML entities. +
+ + + +

+ + + + + + + + + + +
Field Detail
+ + + +

buttonMap

+
Object buttonMap
+ +
+ + +

configs

+
Object configs
+ +
+ + +

currentConfig

+
Object currentConfig
+ +
+ + +

dialogCounter

+
Object dialogCounter
+ +
+ + +

eventHandlers

+
Object eventHandlers
+ +
+ + +

idCounter

+
Object idCounter
+ +
+ + +

instances

+
Object instances
+ +
+ + +

isGecko

+
Object isGecko
+ +
+ + +

isLoaded

+
Object isLoaded
+ +
+ + +

isMac

+
Object isMac
+ +
+ + +

isMSIE

+
Object isMSIE
+ +
+ + +

isMSIE5

+
Object isMSIE5
+ +
+ + +

isMSIE5_0

+
Object isMSIE5_0
+ +
+ + +

isNS7

+
Object isNS7
+ +
+ + +

isNS71

+
Object isNS71
+ +
+ + +

isOpera

+
Object isOpera
+ +
+ + +

isSafari

+
Object isSafari
+ +
+ + +

loadedFiles

+
Object loadedFiles
+ +
+ + +

loadedPlugins

+
Object loadedPlugins
+ +
+ + +

majorVersion

+
Object majorVersion
+ +
+ + +

menus

+
Object menus
+ +
+ + +

minorVersion

+
Object minorVersion
+ +
+ + +

plugins

+
Object plugins
+ +
+ + +

releaseDate

+
Object releaseDate
+ +
+ + +

switchClassCache

+
Object switchClassCache
+ +
+ + +

themes

+
Object themes
+ +
+ + +

windowArgs

+
Object windowArgs
+ +
+ + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_Engine

+
TinyMCE_Engine()
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

_getElementById

+
HTMLElement _getElementById(<string> i<DOMDocument> d, d)
+ + + + + + + + + + + + + + + + + +
+ + +

_removeInternal

+
void _removeInternal(<DOMNode> n)
+ + + + + + + + + + + + + + + +
+ + +

accessibleEventHandler

+
Object accessibleEventHandler(<DOMEvent> e)
+ + + + + + + + + + + + + + + +
+ + +

addButtonMap

+
void addButtonMap(<string> m)
+ + + + + + + + + + + + + + + +
+ + +

addCSSClass

+
string addCSSClass(<HTMLElement> e, c, b)
+ + + + + + + + + + + + + + + + + +
+ + +

addEvent

+
void addEvent(<HTMLElement> o, <string> n, <function> h)
+ + + + + + + + + + + + + + + +
+ + +

addEventHandlers

+
void addEventHandlers(<inst> inst)
+ + + + + + + + + + + + + + + +
+ + +

addMCEControl

+
void addMCEControl(<HTMLElement> replace_element, <string> form_element_name, <DOMDocument> target_document)
+ + + + + + + + + + + + + + + +
+ + +

addMenu

+
void addMenu(<string> n, <TinyMCE_Menu> m)
+ + + + + + + + + + + + + + + +
+ + +

addPlugin

+
void addPlugin(n, <TinyMCE_Plugin> p)
+ + + + + + + + + + + + + + + +
+ + +

addSelectAccessibility

+
Object addSelectAccessibility(<DOMEvent> e, <HTMLElement> s, <DOMWindow> w)
+ + + + + + + + + + + + + + + +
+ + +

addTheme

+
void addTheme(&l<TinyMCE_Theme> t;string> n, t)
+ + + + + + + + + + + + + + + +
+ + +

addToLang

+
void addToLang(<string> prefix, <Array> ar)
+ + + + + + + + + + + + + + + +
+ + +

applyTemplate

+
string applyTemplate(<string> h, <Array> as)
+ + + + + + + + + + + + + + + + + +
+ + +

callFunc

+
boolean callFunc(<<<Array> a href="TinyMCE_Control.html">TinyMCE_Control> ins, <string> p, <string> n, <int> m, a)
+ + + + + + + + + + + + + + + + + +
+ + +

cancelEvent

+
void cancelEvent(<DOMEvent> e)
+ + + + + + + + + + + + + + + +
+ + +

cleanupAnchors

+
void cleanupAnchors(<DOMDocument> doc)
+ + + + + + + + + + + + + + + +
+ + +

cleanupEventStr

+
string cleanupEventStr(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

cleanupHTMLCode

+
string cleanupHTMLCode(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

clearArray

+
Array clearArray(a)
+ + + + + + + + + + + + + + + + + +
+ + +

closeWindow

+
void closeWindow(<DOMWindow> win)
+ + + + + + + + + + + + + + + + + +
+ + +

compressStyle

+
void compressStyle(<Array> ar, <string> pr, <string> sf, <string> res)
+ + + + + + + + + + + + + + + +
+ + +

confirmAdd

+
void confirmAdd(<DOMEvent> e, <Array> settings)
+ + + + + + + + + + + + + + + +
+ + +

convertAbsoluteURLToRelativeURL

+
string convertAbsoluteURLToRelativeURL(<string> base_url, <string> url_to_relative)
+ + + + + + + + + + + + + + + + + +
+ + +

convertAllRelativeURLs

+
void convertAllRelativeURLs(<HTMLElement> body)
+ + + + + + + + + + + + + + + +
+ + +

convertFontsToSpans

+
void convertFontsToSpans(<DOMDocument> doc)
+ + + + + + + + + + + + + + + +
+ + +

convertHexToRGB

+
string convertHexToRGB(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

convertRelativeToAbsoluteURL

+
string convertRelativeToAbsoluteURL(<string> base_url, <string> relative_url)
+ + + + + + + + + + + + + + + + + +
+ + +

convertRGBToHex

+
string convertRGBToHex(<string> s, <boolean> k)
+ + + + + + + + + + + + + + + + + +
+ + +

convertSpansToFonts

+
void convertSpansToFonts(<DOMDocument> doc)
+ + + + + + + + + + + + + + + +
+ + +

convertURL

+
string convertURL(<string> url, <HTMLElement> node, <boolean> on_save)
+ + + + + + + + + + + + + + + + + +
+ + +

debug

+
void debug()
+ + + + + + + + + + + + + + + +
+ + +

dispatchCallback

+
Object dispatchCallback(<TinyMCE_Control> i, <string> p, <string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

entityDecode

+
string entityDecode(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

evalFunc

+
object evalFunc(<string> f, <int> idx, <Array> a)
+ + + + + + + + + + + + + + + + + +
+ + +

execCommand

+
void execCommand(<string> command, <boolean> user_interface, <object> value)
+ + + + + + + + + + + + + + + +
+ + +

execCommandCallback

+
Object execCommandCallback(<TinyMCE_Control> i, <string> p, <string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

execInstanceCommand

+
void execInstanceCommand(<string> editor_id, <string> command, <boolean> user_interface, <object> value, <boolean> focus)
+ + + + + + + + + + + + + + + +
+ + +

executeCallback

+
Object executeCallback(<TinyMCE_Control> i, <string> p, <string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

explode

+
Array explode(<string> d, <string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

extend

+
Object extend(<Object> p, <Object> np)
+ + + + + + + + + + + + + + + + + +
+ + +

fixGeckoBaseHREFBug

+
string fixGeckoBaseHREFBug(<boolean> m, <HTMLElement> e, <string> h)
+ + + + + + + + + + + + + + + + + +
+ + +

getAbsPosition

+
TinyMCE_ElementPosition getAbsPosition(<HTMLNode> n)
+ + + + + + + + + + + + + + + + + +
+ + +

getAttrib

+
string getAttrib(<HTMLElement> elm, <string> name, <string> default_value)
+ + + + + + + + + + + + + + + + + +
+ + +

getButtonHTML

+
string getButtonHTML(<string> id, <string> lang, <string> img, <string> cmd, <string> ui, <string> val)
+ + + + + + + + + + + + + + + + + +
+ + +

getContent

+
string getContent(<string> editor_id)
+ + + + + + + + + + + + + + + + + +
+ + +

getControlHTML

+
string getControlHTML(<string> c)
+ + + + + + + + + + + + + + + + + +
+ + +

getCSSClasses

+
Array getCSSClasses(<string> editor_id, <DOMDocument> doc)
+ + + + + + + + + + + + + + + + + +
+ + +

getEditorId

+
string getEditorId(<string> form_element)
+ + + + + + + + + + + + + + + + + +
+ + +

getElementByAttributeValue

+
HTMLElement getElementByAttributeValue(<HTMLElement> n, <string> e, <string> a, <string> v)
+ + + + + + + + + + + + + + + + + +
+ + +

getElementsByAttributeValue

+
Array getElementsByAttributeValue(<HTMLElement> n, <string> e, <string> a, <string> v)
+ + + + + + + + + + + + + + + + + +
+ + +

getInstanceById

+
TinyMCE_Control getInstanceById(<string> editor_id)
+ + + + + + + + + + + + + + + + + +
+ + +

getLang

+
object getLang(<string> name, <string> default_value, <boolean> parse_entities, <Array> va)
+ + + + + + + + + + + + + + + + + +
+ + +

getNodeTree

+
Array getNodeTree(&l<int> t;HTMLNode> n, <Array> na, t, <string> nn)
+ + + + + + + + + + + + + + + + + +
+ + +

getOuterHTML

+
string getOuterHTML(<HTMLElement> e)
+ + + + + + + + + + + + + + + + + +
+ + +

getParam

+
object getParam(<string> name, <string> default_value, <boolean> strip_whitespace, <string> split_chr)
+ + + + + + + + + + + + + + + + + +
+ + +

getParentBlockElement

+
HTMLElement getParentBlockElement(<HTMLNode> n)
+ + + + + + + + + + + + + + + + + +
+ + +

getParentElement

+
HTMLElement getParentElement(<HTMLNode> node, <string> names, <string> attrib_name, <string> attrib_value)
+ + + + + + + + + + + + + + + + + +
+ + +

getParentNode

+
DOMNode getParentNode(<DOMNode> n, <function> f)
+ + + + + + + + + + + + + + + + + +
+ + +

getVisualAidClass

+
string getVisualAidClass(<string> class_name, <boolean> state)
+ + + + + + + + + + + + + + + + + +
+ + +

getWindowArg

+
Object getWindowArg(<string> n, d)
+ + + + + + + + + + + + + + + + + + + +
+ + +

handleEvent

+
boolean handleEvent(<DOMEvent> e)
+ + + + + + + + + + + + + + + + + +
+ + +

handleVisualAid

+
void handleVisualAid(<HTMLElement> el, <boolean> deep, <boolean> state, <TinyMCE_Control> inst, skip_dispatch)
+ + + + + + + + + + + + + + + +
+ + +

hasMenu

+
boolean hasMenu(<string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

hasPlugin

+
boolean hasPlugin(<string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

hasTheme

+
boolean hasTheme(<string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

importCSS

+
void importCSS(<DOMDocument> doc, <string> css)
+ + + + + + + + + + + + + + + +
+ + +

importPluginLanguagePack

+
void importPluginLanguagePack(<string> name, <string> valid_languages)
+ + + + + + + + + + + + + + + +
+ + +

importThemeLanguagePack

+
void importThemeLanguagePack(<string> name)
+ + + + + + + + + + + + + + + +
+ + +

init

+
void init(settings)
+ + + + + + + + + + + + + + + +
+ + +

insertAfter

+
void insertAfter(<HTMLNode> n, <HTMLNode> r)
+ + + + + + + + + + + + + + + +
+ + +

isBlockElement

+
boolean isBlockElement(<HTMLNode> n)
+ + + + + + + + + + + + + + + + + +
+ + +

isInstance

+
boolean isInstance(<object> o)
+ + + + + + + + + + + + + + + + + +
+ + +

loadCSS

+
void loadCSS(<string> url)
+ + + + + + + + + + + + + + + +
+ + +

loadPlugin

+
void loadPlugin(<string> n, <string> u)
+ + + + + + + + + + + + + + + +
+ + +

loadScript

+
void loadScript(<string> url)
+ + + + + + + + + + + + + + + +
+ + +

nextNode

+
HTMLElement nextNode(<HTMLNode> e, <string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

onLoad

+
boolean onLoad()
+ + + + + + + + + + + + + + + +
+ + +

onMouseMove

+
void onMouseMove()
+ + + + + + + + + + + + + +
+ + +

openWindow

+
void openWindow(<Array> template, <Array> args)
+ + + + + + + + + + + + + + + +
+ + +

parseStyle

+
Array parseStyle(<string> str)
+ + + + + + + + + + + + + + + + + +
+ + +

parseURL

+
TinyMCE_URL_Item parseURL(<string> url_str)
+ + + + + + + + + + + + + + + + + +
+ + +

prevNode

+
HTMLElement prevNode(<HTMLNode> e, <string> n)
+ + + + + + + + + + + + + + + + + +
+ + +

queryInstanceCommandState

+
boolean queryInstanceCommandState(<string> editor_id, <string> command)
+ + + + + + + + + + + + + + + + + +
+ + +

queryInstanceCommandValue

+
object queryInstanceCommandValue(<string> editor_id, <string> command)
+ + + + + + + + + + + + + + + + + +
+ + +

regexpReplace

+
string regexpReplace(<string> in_str, <string> reg_exp, <string> replace_str, opts)
+ + + + + + + + + + + + + + + + + + + +
+ + +

removeCSSClass

+
string removeCSSClass(<HTMLElement> e, c)
+ + + + + + + + + + + + + + + + + +
+ + +

removeMCEControl

+
void removeMCEControl(<string> editor_id)
+ + + + + + + + + + + + + + + +
+ + +

removeTinyMCEFormElements

+
void removeTinyMCEFormElements(<HTMLElement> form_obj)
+ + + + + + + + + + + + + + + +
+ + +

renameElement

+
void renameElement(<HTMLElement> e, <string> n, <DOMDocument> d)
+ + + + + + + + + + + + + + + +
+ + +

replaceVar

+
string replaceVar(<string> h, <string> r, <string> v)
+ + + + + + + + + + + + + + + + + +
+ + +

resetForm

+
void resetForm(<int> form_index)
+ + + + + + + + + + + + + + + +
+ + +

selectNodes

+
Array selectNodes(<DOMNode> n, <function> f, <Array> a)
+ + + + + + + + + + + + + + + + + +
+ + +

serializeStyle

+
string serializeStyle(<Array> ar)
+ + + + + + + + + + + + + + + + + +
+ + +

serializeURL

+
string serializeURL(<TinyMCE_URL_Item> up)
+ + + + + + + + + + + + + + + + + +
+ + +

setAttrib

+
void setAttrib(<HTMLElement> element, <string> name, <string> value, <boolean> fix_value)
+ + + + + + + + + + + + + + + +
+ + +

setContent

+
void setContent(<string> h)
+ + + + + + + + + + + + + + + + + +
+ + +

setInnerHTML

+
void setInnerHTML(<HTMLElement> e, <string> h)
+ + + + + + + + + + + + + + + +
+ + +

setOuterHTML

+
void setOuterHTML(<HTMLElement> e, <string> h)
+ + + + + + + + + + + + + + + +
+ + +

setPluginBaseURL

+
void setPluginBaseURL(<string> n, <string> u)
+ + + + + + + + + + + + + + + +
+ + +

setStyleAttrib

+
void setStyleAttrib(<HTMLElement> elm, <string> name, <string> value)
+ + + + + + + + + + + + + + + +
+ + +

setupContent

+
void setupContent(<string> editor_id)
+ + + + + + + + + + + + + + + +
+ + +

setWindowArg

+
void setWindowArg(<string> n, <string> v)
+ + + + + + + + + + + + + + + +
+ + +

storeAwayURLs

+
string storeAwayURLs(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

submitPatch

+
void submitPatch()
+ + + + + + + + + + + + + +
+ + +

switchClass

+
void switchClass(<HTMLElement> ei, <string> c)
+ + + + + + + + + + + + + + + +
+ + +

triggerNodeChange

+
void triggerNodeChange(<boolean> focus, <boolean> setup_content)
+ + + + + + + + + + + + + + + +
+ + +

triggerSave

+
void triggerSave(<boolean> skip_cleanup, <boolean> skip_callback)
+ + + + + + + + + + + + + + + +
+ + +

trim

+
string trim(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

unloadHandler

+
void unloadHandler()
+ + + + + + + + + + + + + +
+ + +

updateContent

+
void updateContent(<string> form_element_name)
+ + + + + + + + + + + + + + + + + +
+ + +

xmlEncode

+
string xmlEncode(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Layer.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Layer.html new file mode 100644 index 000000000..9e7411771 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Layer.html @@ -0,0 +1,952 @@ + + + + + +TinyMCE_Layer + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_Layer

+
Object
+   |
+   +--TinyMCE_Layer
+
+ + +
+
+ +
class + TinyMCE_Layer + + +
+ +

+ Defined in TinyMCE_Layer.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_Layer + + (<string> id, <boolean> bm) + +
+             + Constructor for the TinyMCE Layer. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  HTMLElement + + + + + create(<string> n, <string> c, <HTMLElement> p) + +
+            + Creates a element for the layer based on the id and specified name. +
+ +  Object + + + + + getAbsPosition(<DOMElement> n) + +
+            + Returns the absolute x, y cordinate of the specified node. +
+ +  HTMLElement + + + + + getBlocker() + +
+            + Returns the blocker DOM element, this is a invisible iframe. +
+ +  HTMLElement + + + + + getElement() + +
+            + Returns the DOM element that the layer is binded to. +
+ +  void + + + + + hide() + +
+            + Hides the layer. +
+ +  boolean + + + + + isVisible() + +
+            + Returns true/false if the layer is visible or not. +
+ +  void + + + + + moveBy(<int> x, <int> y) + +
+            + Moves the layer relative in pixels. +
+ +  void + + + + + moveRelativeTo(<HTMLElement> re, <string> p) + +
+            + Moves the layer relative to the specified HTML element. +
+ +  void + + + + + moveTo(<int> x, <int> y) + +
+            + Moves the layer absolute in pixels. +
+ +  int + + + + + parseInt(<string> s) + +
+            + Parses a int value this method will return 0 if the string is empty. +
+ +  void + + + + + resizeBy(<int> w, <int> h) + +
+            + Resizes the layer by the specified relative width and height. +
+ +  void + + + + + resizeTo(<int> w, <int> h) + +
+            + Resizes the layer to the specified width and height. +
+ +  void + + + + + setBlockMode(<boolean> s) + +
+            + Sets the block mode. +
+ +  void + + + + + show() + +
+            + Shows the layer. +
+ +  void + + + + + updateBlocker() + +
+            + Updates the select/iframe/flash blocker this will also block the caret in Firefox. +
+ + + +

+ + + + + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_Layer

+
TinyMCE_Layer(<string> id, <boolean> bm)
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

create

+
HTMLElement create(<string> n, <string> c, <HTMLElement> p)
+ + + + + + + + + + + + + + + + + +
+ + +

getAbsPosition

+
Object getAbsPosition(<DOMElement> n)
+ + + + + + + + + + + + + + + + + +
+ + +

getBlocker

+
HTMLElement getBlocker()
+ + + + + + + + + + + + + + + +
+ + +

getElement

+
HTMLElement getElement()
+ + + + + + + + + + + + + + + +
+ + +

hide

+
void hide()
+ + + + + + + + + + + + + +
+ + +

isVisible

+
boolean isVisible()
+ + + + + + + + + + + + + + + +
+ + +

moveBy

+
void moveBy(<int> x, <int> y)
+ + + + + + + + + + + + + + + +
+ + +

moveRelativeTo

+
void moveRelativeTo(<HTMLElement> re, <string> p)
+ + + + + + + + + + + + + + + +
+ + +

moveTo

+
void moveTo(<int> x, <int> y)
+ + + + + + + + + + + + + + + +
+ + +

parseInt

+
int parseInt(<string> s)
+ + + + + + + + + + + + + + + + + +
+ + +

resizeBy

+
void resizeBy(<int> w, <int> h)
+ + + + + + + + + + + + + + + +
+ + +

resizeTo

+
void resizeTo(<int> w, <int> h)
+ + + + + + + + + + + + + + + +
+ + +

setBlockMode

+
void setBlockMode(<boolean> s)
+ + + + + + + + + + + + + + + +
+ + +

show

+
void show()
+ + + + + + + + + + + + + +
+ + +

updateBlocker

+
void updateBlocker()
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Popup.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Popup.html new file mode 100644 index 000000000..bc1e18a15 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Popup.html @@ -0,0 +1,789 @@ + + + + + +TinyMCE_Popup + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_Popup

+
Object
+   |
+   +--TinyMCE_Popup
+
+ + +
+
+ +
class + TinyMCE_Popup + + +
+ +

+ Defined in TinyMCE_Popup.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_Popup + + () + +
+             + Constructor for the popup class. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  void + + + + + close() + +
+            + Closes the current window. +
+ +  void + + + + + execCommand(<string> command, <boolean> user_interface, <mixed> value) + +
+            + Executes the specific command on the parent instance that opened the window. +
+ +  void + + + + + executeOnLoad(<string> str) + +
+            + Executes the specified string onload. +
+ +  Object + + + + + getWindowArg(<string> name, <string> default_value) + +
+            + Returns a window argument, window arguments can be passed from a plugin to a window + by using the tinyMCE.openWindow function. +
+ +  void + + + + + importClass(<string> c) + +
+            + Imports the specified class into the current popup. +
+ +  void + + + + + init() + +
+            + Initializes the TinyMCE Popup class. +
+ +  void + + + + + onLoad() + +
+            + Gets executed when the window has finished loading it's contents. +
+ +  void + + + + + openBrowser(<string> element_id, <string> type, <string> option) + +
+            + Opens a filebrowser/imagebrowser this will set the output value from + the browser as a value on the specified element. +
+ +  void + + + + + pickColor(<DOMEvent> e, <string> element_id) + +
+            + Executes a color picker on the specified element id. +
+ +  void + + + + + resizeToContent() + +
+            + Resizes the current window to the dimensions of the body. +
+ +  void + + + + + resizeToInnerSize() + +
+            + Resizes the current window to it's inner body size. +
+ +  void + + + + + restoreSelection() + +
+            + Restores the selection back to the one stored after executing a command. +
+ + + +

+ + + + + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_Popup

+
TinyMCE_Popup()
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

close

+
void close()
+ + + + + + + + + + + + + +
+ + +

execCommand

+
void execCommand(<string> command, <boolean> user_interface, <mixed> value)
+ + + + + + + + + + + + + + + +
+ + +

executeOnLoad

+
void executeOnLoad(<string> str)
+ + + + + + + + + + + + + + + +
+ + +

getWindowArg

+
Object getWindowArg(<string> name, <string> default_value)
+ + + + + + + + + + + + + + + + + +
+ + +

importClass

+
void importClass(<string> c)
+ + + + + + + + + + + + + + + +
+ + +

init

+
void init()
+ + + + + + + + + + + + + +
+ + +

onLoad

+
void onLoad()
+ + + + + + + + + + + + + +
+ + +

openBrowser

+
void openBrowser(<string> element_id, <string> type, <string> option)
+ + + + + + + + + + + + + + + +
+ + +

pickColor

+
void pickColor(<DOMEvent> e, <string> element_id)
+ + + + + + + + + + + + + + + +
+ + +

resizeToContent

+
void resizeToContent()
+ + + + + + + + + + + + + +
+ + +

resizeToInnerSize

+
void resizeToInnerSize()
+ + + + + + + + + + + + + +
+ + +

restoreSelection

+
void restoreSelection()
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Selection.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Selection.html new file mode 100644 index 000000000..b3248c70e --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_Selection.html @@ -0,0 +1,732 @@ + + + + + +TinyMCE_Selection + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_Selection

+
Object
+   |
+   +--TinyMCE_Selection
+
+ + +
+
+ +
class + TinyMCE_Selection + + +
+ +

+ Defined in TinyMCE_Selection.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + +
+ Field Summary
+  Objectinstance +
+           
+   + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_Selection + + (<TinyMCE_Control> inst) + +
+             + Constructs a Selection instance and binds it to the specificed TinyMCE editor control. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  TinyMCE_Bookmark + + + + + getBookmark(<boolean> simple) + +
+            + Returns a selection bookmark that can be restored later with moveToBookmark. +
+ +  HTMLElement + + + + + getFocusElement() + +
+            + Returns the currently selected/focused element. +
+ +  DOMRange + + + + + getRng() + +
+            + Returns the browsers selections first range instance. +
+ +  DOMSelection + + + + + getSel() + +
+            + Returns the browsers selection instance. +
+ +  string + + + + + getSelectedHTML() + +
+            + Returns the selected HTML code. +
+ +  string + + + + + getSelectedText() + +
+            + Returns the selected text. +
+ +  boolean + + + + + moveToBookmark(<TinyMCE_Bookmark> bookmark) + +
+            + Restores the selection to the specified bookmark. +
+ +  void + + + + + scrollToNode(<HTMLNode> node) + +
+            + Scrolls to the specified node location. +
+ +  void + + + + + selectNode(<HTMLNode> node, <boolean> collapse, <boolean> select_text_node, <boolean> to_start) + +
+            + Selects the specified node. +
+ + + +

+ + + + + + + + + + +
Field Detail
+ + + +

instance

+
Object instance
+ +
+ + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_Selection

+
TinyMCE_Selection(<TinyMCE_Control> inst)
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

getBookmark

+
TinyMCE_Bookmark getBookmark(<boolean> simple)
+ + + + + + + + + + + + + + + + + +
+ + +

getFocusElement

+
HTMLElement getFocusElement()
+ + + + + + + + + + + + + + + +
+ + +

getRng

+
DOMRange getRng()
+ + + + + + + + + + + + + + + +
+ + +

getSel

+
DOMSelection getSel()
+ + + + + + + + + + + + + + + +
+ + +

getSelectedHTML

+
string getSelectedHTML()
+ + + + + + + + + + + + + + + +
+ + +

getSelectedText

+
string getSelectedText()
+ + + + + + + + + + + + + + + +
+ + +

moveToBookmark

+
boolean moveToBookmark(<TinyMCE_Bookmark> bookmark)
+ + + + + + + + + + + + + + + + + +
+ + +

scrollToNode

+
void scrollToNode(<HTMLNode> node)
+ + + + + + + + + + + + + + + +
+ + +

selectNode

+
void selectNode(<HTMLNode> node, <boolean> collapse, <boolean> select_text_node, <boolean> to_start)
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/TinyMCE_UndoRedo.html b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_UndoRedo.html new file mode 100644 index 000000000..19034eab6 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/TinyMCE_UndoRedo.html @@ -0,0 +1,513 @@ + + + + + +TinyMCE_UndoRedo + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+ + +

Class TinyMCE_UndoRedo

+
Object
+   |
+   +--TinyMCE_UndoRedo
+
+ + +
+
+ +
class + TinyMCE_UndoRedo + + +
+ +

+ Defined in TinyMCE_UndoRedo.class.js

+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Field Summary
+  Objectinstance +
+           
+  ObjecttypingUndoIndex +
+           
+  ObjectundoIndex +
+           
+  ObjectundoLevels +
+           
+  ObjectundoRedo +
+           
+   + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ + + TinyMCE_UndoRedo + + (<TinyMCE_Control> inst) + +
+             + Constructs a undo redo instance, this instance handles the custom undo/redo handeling in TinyMCE. +
+ + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ +  boolean + + + + + add(<TinyMCE_UndoRedoLevel> l) + +
+            + Adds a new undo level, this will take a snapshot of the current instance HTML or use the specified level. +
+ +  void + + + + + redo() + +
+            + Performes a undo action, this will restore the HTML contents of the editor to a former undoed state. +
+ +  void + + + + + undo() + +
+            + Performes a undo action, this will restore the HTML contents of the editor to a former state. +
+ + + +

+ + + + + + + + + + +
Field Detail
+ + + +

instance

+
Object instance
+ +
+ + +

typingUndoIndex

+
Object typingUndoIndex
+ +
+ + +

undoIndex

+
Object undoIndex
+ +
+ + +

undoLevels

+
Object undoLevels
+ +
+ + +

undoRedo

+
Object undoRedo
+ +
+ + + + + + + + + + + + +
+ Constructor Detail +
+ +

+TinyMCE_UndoRedo

+
TinyMCE_UndoRedo(<TinyMCE_Control> inst)
+ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + +
+ Method Detail +
+ + + + +

add

+
boolean add(<TinyMCE_UndoRedoLevel> l)
+ + + + + + + + + + + + + + + + + +
+ + +

redo

+
void redo()
+ + + + + + + + + + + + + +
+ + +

undo

+
void undo()
+ + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ + + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/allclasses-frame.html b/www/extras/tinymce2/docs/tinymce_api/allclasses-frame.html new file mode 100644 index 000000000..d2eabd4ef --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/allclasses-frame.html @@ -0,0 +1,77 @@ + + + + + + All Classes + + + + + + +

+ +All Classes +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GLOBALS +
+
TinyMCE_Cleanup +
+
TinyMCE_Control +
+
TinyMCE_Engine +
+
TinyMCE_Layer +
+
TinyMCE_Popup +
+
TinyMCE_Selection +
+
TinyMCE_UndoRedo +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/allclasses-noframe.html b/www/extras/tinymce2/docs/tinymce_api/allclasses-noframe.html new file mode 100644 index 000000000..4be61de5a --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/allclasses-noframe.html @@ -0,0 +1,76 @@ + + + + + All Classes + + + + + + +

+ +All Classes +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
GLOBALS +
+
TinyMCE_Cleanup +
+
TinyMCE_Control +
+
TinyMCE_Engine +
+
TinyMCE_Layer +
+
TinyMCE_Popup +
+
TinyMCE_Selection +
+
TinyMCE_UndoRedo +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/help-doc.html b/www/extras/tinymce2/docs/tinymce_api/help-doc.html new file mode 100644 index 000000000..638433849 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/help-doc.html @@ -0,0 +1,160 @@ + + + + + API Help + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Class

+
+ +

+Each class has its own separate page. Each of these pages has three sections consisting of a class description, summary tables, and detailed member descriptions:

+Each summary entry contains the first sentence from the detailed description for that item.
+ + +

+Index

+
+The Index contains an alphabetic list of all classes, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + +
+ + +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/index-all.html b/www/extras/tinymce2/docs/tinymce_api/index-all.html new file mode 100644 index 000000000..48596d246 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/index-all.html @@ -0,0 +1,1663 @@ + + + + + +Index () + + + + + + + + + + + + + + + + + + +
+ + +
+ + +_ A B C D E F G H I L M N O P Q R S T U W X +
+ + +

+_

+ +
+
_getElementById(id, d) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
_removeInternal(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+A

+ +
+
accessibleEventHandler(e) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
add(l) - +Instance method in class TinyMCE_UndoRedo +
  +
+ +
+
addButtonMap(m) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addCSSClass(e, c, b) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addEvent(o, n, h) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addEventHandlers(inst) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addMCEControl(replace_element, form_element_name, target_document) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addMenu(n, m) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addPlugin(n, p) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addPlugin(n, p) - +Instance method in class TinyMCE_Control +
  +
+ +
+
addRuleStr(s) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+
addSelectAccessibility(e, s, w) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addShortcut(m, k, d, cmd, ui, va) - +Instance method in class TinyMCE_Control +
  +
+ +
+
addTheme(n, t) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
addToLang(prefix, ar) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
applyTemplate(h, as) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
autoResetDesignMode() - +Instance method in class TinyMCE_Control +
  +
+ +
+ +

+B

+ +
+
buttonMap - +Instance field in class TinyMCE_Engine +
  +
+ +
+ +

+C

+ +
+
callFunc(ins, p, n, m, a) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
cancelEvent(e) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
cleanup - +Instance field in class TinyMCE_Control +
  +
+ +
+
cleanupAnchors(doc) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
cleanupEventStr(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
cleanupHTMLCode(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
clearArray(a) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
close() - +Instance method in class TinyMCE_Popup +
  +
+ +
+
closeWindow(win) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
compressStyle(ar, pr, sf, res) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
configs - +Instance field in class TinyMCE_Engine +
  +
+ +
+
confirmAdd(e, settings) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertAbsoluteURLToRelativeURL(base_url, url_to_relative) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertAllRelativeURLs(body) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertFontsToSpans(doc) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertHexToRGB(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertRelativeToAbsoluteURL(base_url, relative_url) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertRGBToHex(s, k) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertSpansToFonts(doc) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
convertURL(url, node, on_save) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
create(n, c, p) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
currentConfig - +Instance field in class TinyMCE_Engine +
  +
+ +
+ +

+D

+ +
+
debug() - +Instance method in class TinyMCE_Engine +
  +
+ +
+
dialogCounter - +Instance field in class TinyMCE_Engine +
  +
+ +
+
dispatchCallback(i, p, n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+E

+ +
+
entityDecode(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
evalFunc(f, idx, a) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
eventHandlers - +Instance field in class TinyMCE_Engine +
  +
+ +
+
execCommand(command, user_interface, value) - +Instance method in class TinyMCE_Control +
  +
+ +
+
execCommand(command, user_interface, value) - +Instance method in class TinyMCE_Popup +
  +
+ +
+
execCommand(command, user_interface, value) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
execCommandCallback(i, p, n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
execInstanceCommand(editor_id, command, user_interface, value, focus) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
executeCallback(i, p, n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
executeOnLoad(str) - +Instance method in class TinyMCE_Popup +
  +
+ +
+
explode(d, s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
extend(p, np) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+F

+ +
+
fixGeckoBaseHREFBug(m, e, h) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
formatHTML(h) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+ +

+G

+ +
+
getAbsPosition(n) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
getAbsPosition(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getAttrib(elm, name, default_value) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getBlocker() - +Instance method in class TinyMCE_Layer +
  +
+ +
+
getBody() - +Instance method in class TinyMCE_Control +
  +
+ +
+
getBookmark(simple) - +Instance method in class TinyMCE_Selection +
  +
+ +
+
getButtonHTML(id, lang, img, cmd, ui, val) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getContent(editor_id) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getControlHTML(c) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getCSSClasses(editor_id, doc) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getDoc() - +Instance method in class TinyMCE_Control +
  +
+ +
+
getEditorId(form_element) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getElement() - +Instance method in class TinyMCE_Layer +
  +
+ +
+
getElementByAttributeValue(n, e, a, v) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getElementsByAttributeValue(n, e, a, v) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getFocusElement() - +Instance method in class TinyMCE_Control +
  +
+ +
+
getFocusElement() - +Instance method in class TinyMCE_Selection +
  +
+ +
+
getInstanceById(editor_id) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getLang(name, default_value, parse_entities, va) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getNodeTree(n, na, t, nn) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getOuterHTML(e) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getParam(name, default_value, strip_whitespace, split_chr) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getParentBlockElement(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getParentElement(node, names, attrib_name, attrib_value) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getParentNode(n, f) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getRng() - +Instance method in class TinyMCE_Control +
  +
+ +
+
getRng() - +Instance method in class TinyMCE_Selection +
  +
+ +
+
getSel() - +Instance method in class TinyMCE_Selection +
  +
+ +
+
getSel() - +Instance method in class TinyMCE_Control +
  +
+ +
+
getSelectedHTML() - +Instance method in class TinyMCE_Selection +
  +
+ +
+
getSelectedText() - +Instance method in class TinyMCE_Selection +
  +
+ +
+
getVisualAidClass(class_name, state) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getWin() - +Instance method in class TinyMCE_Control +
  +
+ +
+
getWindowArg(n, d) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
getWindowArg(name, default_value) - +Instance method in class TinyMCE_Popup +
  +
+ +
+
GLOBALS - + class GLOBALS +
  +
+ +
+ +

+H

+ +
+
handleEvent(e) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
handleShortcut(e) - +Instance method in class TinyMCE_Control +
  +
+ +
+
handleVisualAid(el, deep, state, inst, skip_dispatch) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
hasMenu(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
hasMouseMoved - +Instance field in class TinyMCE_Control +
  +
+ +
+
hasPlugin(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
hasPlugin(n) - +Instance method in class TinyMCE_Control +
  +
+ +
+
hasTheme(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
hide() - +Instance method in class TinyMCE_Layer +
  +
+ +
+ +

+I

+ +
+
idCounter - +Instance field in class TinyMCE_Engine +
  +
+ +
+
importClass(c) - +Instance method in class TinyMCE_Popup +
  +
+ +
+
importCSS(doc, css) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
importPluginLanguagePack(name, valid_languages) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
importThemeLanguagePack(name) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
init() - +Instance method in class TinyMCE_Popup +
  +
+ +
+
init(s) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+
init(settings) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
insertAfter(n, r) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
instance - +Instance field in class TinyMCE_Selection +
  +
+ +
+
instance - +Instance field in class TinyMCE_UndoRedo +
  +
+ +
+
instances - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isBlockElement(n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
isDirty() - +Instance method in class TinyMCE_Control +
  +
+ +
+
isGecko - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isHidden() - +Instance method in class TinyMCE_Control +
  +
+ +
+
isInstance(o) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
isLoaded - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isMac - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isMSIE - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isMSIE5 - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isMSIE5_0 - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isNS7 - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isNS71 - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isOpera - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isSafari - +Instance field in class TinyMCE_Engine +
  +
+ +
+
isTinyMCE_Control - +Instance field in class TinyMCE_Control +
  +
+ +
+
isVisible() - +Instance method in class TinyMCE_Layer +
  +
+ +
+ +

+L

+ +
+
loadCSS(url) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
loadedFiles - +Instance field in class TinyMCE_Engine +
  +
+ +
+
loadedPlugins - +Instance field in class TinyMCE_Engine +
  +
+ +
+
loadPlugin(n, u) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
loadScript(url) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+M

+ +
+
majorVersion - +Instance field in class TinyMCE_Engine +
  +
+ +
+
menus - +Instance field in class TinyMCE_Engine +
  +
+ +
+
minorVersion - +Instance field in class TinyMCE_Engine +
  +
+ +
+
moveBy(x, y) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
moveRelativeTo(re, p) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
moveTo(x, y) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
moveToBookmark(bookmark) - +Instance method in class TinyMCE_Selection +
  +
+ +
+ +

+N

+ +
+
nextNode(e, n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+O

+ +
+
onLoad() - +Instance method in class TinyMCE_Popup +
  +
+ +
+
onLoad() - +Instance method in class TinyMCE_Engine +
  +
+ +
+
onMouseMove() - +Instance method in class TinyMCE_Engine +
  +
+ +
+
openBrowser(element_id, type, option) - +Instance method in class TinyMCE_Popup +
  +
+ +
+
openWindow(template, args) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+P

+ +
+
parseInt(s) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
parseRuleStr(s) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+
parseStyle(str) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
parseURL(url_str) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
pickColor(e, element_id) - +Instance method in class TinyMCE_Popup +
  +
+ +
+
plugins - +Instance field in class TinyMCE_Engine +
  +
+ +
+
plugins - +Instance field in class TinyMCE_Control +
  +
+ +
+
prevNode(e, n) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+Q

+ +
+
queryCommandState(c) - +Instance method in class TinyMCE_Control +
  +
+ +
+
queryCommandValue(c) - +Instance method in class TinyMCE_Control +
  +
+ +
+
queryInstanceCommandState(editor_id, command) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
queryInstanceCommandValue(editor_id, command) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+R

+ +
+
redo() - +Instance method in class TinyMCE_UndoRedo +
  +
+ +
+
regexpReplace(in_str, reg_exp, replace_str, opts) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
releaseDate - +Instance field in class TinyMCE_Engine +
  +
+ +
+
removeCSSClass(e, c) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
removeMCEControl(editor_id) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
removeTinyMCEFormElements(form_obj) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
renameElement(e, n, d) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
repaint() - +Instance method in class TinyMCE_Control +
  +
+ +
+
replaceVar(h, r, v) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
resetForm(form_index) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
resizeBy(w, h) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
resizeTo(w, h) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
resizeToContent() - +Instance method in class TinyMCE_Popup +
  +
+ +
+
resizeToInnerSize() - +Instance method in class TinyMCE_Popup +
  +
+ +
+
restoreSelection() - +Instance method in class TinyMCE_Popup +
  +
+ +
+ +

+S

+ +
+
scrollToNode(node) - +Instance method in class TinyMCE_Selection +
  +
+ +
+
selection - +Instance field in class TinyMCE_Control +
  +
+ +
+
selectNode(node, collapse, select_text_node, to_start) - +Instance method in class TinyMCE_Selection +
  +
+ +
+
selectNodes(n, f, a) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
serializeNodeAsHTML(n) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+
serializeNodeAsXML(n) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+
serializeStyle(ar) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
serializeURL(up) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setAttrib(element, name, value, fix_value) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setBaseHREF(u) - +Instance method in class TinyMCE_Control +
  +
+ +
+
setBlockMode(s) - +Instance method in class TinyMCE_Layer +
  +
+ +
+
setContent(h) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setInnerHTML(e, h) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setOuterHTML(e, h) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setPluginBaseURL(n, u) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setStyleAttrib(elm, name, value) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
settings - +Instance field in class TinyMCE_Control +
  +
+ +
+
setupContent(editor_id) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
setWindowArg(n, v) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
shortcuts - +Instance field in class TinyMCE_Control +
  +
+ +
+
show() - +Instance method in class TinyMCE_Layer +
  +
+ +
+
split(re, s) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+
storeAwayURLs(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
submitPatch() - +Instance method in class TinyMCE_Engine +
  +
+ +
+
switchClass(ei, c) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
switchClassCache - +Instance field in class TinyMCE_Engine +
  +
+ +
+
switchSettings() - +Instance method in class TinyMCE_Control +
  +
+ +
+ +

+T

+ +
+
themes - +Instance field in class TinyMCE_Engine +
  +
+ +
+
TinyMCE_Cleanup - + class TinyMCE_Cleanup +
  +
+ +
+
TinyMCE_Cleanup() - +Constructor in class TinyMCE_Cleanup +
  +
+ +
+
TinyMCE_Control - + class TinyMCE_Control +
  +
+ +
+
TinyMCE_Control(settings) - +Constructor in class TinyMCE_Control +
  +
+ +
+
TinyMCE_Engine - + class TinyMCE_Engine +
  +
+ +
+
TinyMCE_Engine() - +Constructor in class TinyMCE_Engine +
  +
+ +
+
TinyMCE_Layer - + class TinyMCE_Layer +
  +
+ +
+
TinyMCE_Layer(id, bm) - +Constructor in class TinyMCE_Layer +
  +
+ +
+
TinyMCE_Menu() - +Class method in class GLOBALS +
  +
+ +
+
TinyMCE_Popup - + class TinyMCE_Popup +
  +
+ +
+
TinyMCE_Popup() - +Constructor in class TinyMCE_Popup +
  +
+ +
+
TinyMCE_Selection - + class TinyMCE_Selection +
  +
+ +
+
TinyMCE_Selection(inst) - +Constructor in class TinyMCE_Selection +
  +
+ +
+
TinyMCE_UndoRedo - + class TinyMCE_UndoRedo +
  +
+ +
+
TinyMCE_UndoRedo(inst) - +Constructor in class TinyMCE_UndoRedo +
  +
+ +
+
triggerNodeChange(focus, setup_content) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
triggerSave(skip_cleanup, skip_callback) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
triggerSave(skip_cleanup, skip_callback) - +Instance method in class TinyMCE_Control +
  +
+ +
+
trim(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
typingUndoIndex - +Instance field in class TinyMCE_UndoRedo +
  +
+ +
+ +

+U

+ +
+
undo() - +Instance method in class TinyMCE_UndoRedo +
  +
+ +
+
undoIndex - +Instance field in class TinyMCE_UndoRedo +
  +
+ +
+
undoLevels - +Instance field in class TinyMCE_UndoRedo +
  +
+ +
+
undoRedo - +Instance field in class TinyMCE_Control +
  +
+ +
+
undoRedo - +Instance field in class TinyMCE_UndoRedo +
  +
+ +
+
undoRedoLevel - +Instance field in class TinyMCE_Control +
  +
+ +
+
unloadHandler() - +Instance method in class TinyMCE_Engine +
  +
+ +
+
updateBlocker() - +Instance method in class TinyMCE_Layer +
  +
+ +
+
updateContent(form_element_name) - +Instance method in class TinyMCE_Engine +
  +
+ +
+ +

+W

+ +
+
windowArgs - +Instance field in class TinyMCE_Engine +
  +
+ +
+ +

+X

+ +
+
xmlEncode(s) - +Instance method in class TinyMCE_Engine +
  +
+ +
+
xmlEncode(s) - +Instance method in class TinyMCE_Cleanup +
  +
+ +
+ +_ A B C D E F G H I L M N O P Q R S T U W X + + + + + + + + + + + + + + +
+ + +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/index.html b/www/extras/tinymce2/docs/tinymce_api/index.html new file mode 100644 index 000000000..520a2ae6b --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/index.html @@ -0,0 +1,27 @@ + + + + +Generated Javascript Documentation + + + + + + + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to <A HREF="allclasses-frame.html">Non-frame version.</A> + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Array.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Array.class.js.html new file mode 100644 index 000000000..26af9adb2 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Array.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_Array.class.js + + + + + + +

+ +TinyMCE_Array.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Cleanup.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Cleanup.class.js.html new file mode 100644 index 000000000..52450056b --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Cleanup.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_Cleanup.class.js + + + + + + +

+ +TinyMCE_Cleanup.class.js +
+ + + + + + + + +
TinyMCE_Cleanup +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Control.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Control.class.js.html new file mode 100644 index 000000000..4e2da1f7d --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Control.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_Control.class.js + + + + + + +

+ +TinyMCE_Control.class.js +
+ + + + + + + + +
TinyMCE_Control +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_DOMUtils.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_DOMUtils.class.js.html new file mode 100644 index 000000000..5373ef27c --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_DOMUtils.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_DOMUtils.class.js + + + + + + +

+ +TinyMCE_DOMUtils.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Debug.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Debug.class.js.html new file mode 100644 index 000000000..c9f7af589 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Debug.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_Debug.class.js + + + + + + +

+ +TinyMCE_Debug.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Engine.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Engine.class.js.html new file mode 100644 index 000000000..5e748e1cb --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Engine.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_Engine.class.js + + + + + + +

+ +TinyMCE_Engine.class.js +
+ + + + + + + + +
TinyMCE_Engine +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Event.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Event.class.js.html new file mode 100644 index 000000000..4aa83e716 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Event.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_Event.class.js + + + + + + +

+ +TinyMCE_Event.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_ForceParagraphs.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_ForceParagraphs.class.js.html new file mode 100644 index 000000000..0c2c201af --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_ForceParagraphs.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_ForceParagraphs.class.js + + + + + + +

+ +TinyMCE_ForceParagraphs.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Layer.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Layer.class.js.html new file mode 100644 index 000000000..b54982bc6 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Layer.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_Layer.class.js + + + + + + +

+ +TinyMCE_Layer.class.js +
+ + + + + + + + +
TinyMCE_Layer +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Menu.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Menu.class.js.html new file mode 100644 index 000000000..334f06824 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Menu.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_Menu.class.js + + + + + + +

+ +TinyMCE_Menu.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Popup.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Popup.class.js.html new file mode 100644 index 000000000..d5877914f --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Popup.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_Popup.class.js + + + + + + +

+ +TinyMCE_Popup.class.js +
+ + + + + + + + +
TinyMCE_Popup +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Selection.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Selection.class.js.html new file mode 100644 index 000000000..079703a47 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_Selection.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_Selection.class.js + + + + + + +

+ +TinyMCE_Selection.class.js +
+ + + + + + + + +
TinyMCE_Selection +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_URL.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_URL.class.js.html new file mode 100644 index 000000000..5269f4c98 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_URL.class.js.html @@ -0,0 +1,30 @@ + + + + + + TinyMCE_URL.class.js + + + + + + +

+ +TinyMCE_URL.class.js +
+ + + + +
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_UndoRedo.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_UndoRedo.class.js.html new file mode 100644 index 000000000..ac7c77e97 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-TinyMCE_UndoRedo.class.js.html @@ -0,0 +1,36 @@ + + + + + + TinyMCE_UndoRedo.class.js + + + + + + +

+ +TinyMCE_UndoRedo.class.js +
+ + + + + + + + +
TinyMCE_UndoRedo +
+
+ + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-frame.html b/www/extras/tinymce2/docs/tinymce_api/overview-frame.html new file mode 100644 index 000000000..2019c7676 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-frame.html @@ -0,0 +1,67 @@ + + + + +Overview () + + + + + + +

+ + + + +
+ + + + + +
All Classes +

+ +Files +
+ +TinyMCE_Array.class.js
+ +TinyMCE_Cleanup.class.js
+ +TinyMCE_Control.class.js
+ +TinyMCE_Debug.class.js
+ +TinyMCE_DOMUtils.class.js
+ +TinyMCE_Engine.class.js
+ +TinyMCE_Event.class.js
+ +TinyMCE_ForceParagraphs.class.js
+ +TinyMCE_Layer.class.js
+ +TinyMCE_Menu.class.js
+ +TinyMCE_Popup.class.js
+ +TinyMCE_Selection.class.js
+ +TinyMCE_UndoRedo.class.js
+ +TinyMCE_URL.class.js
+ +

+ +

+  + + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Array.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Array.class.js.html new file mode 100644 index 000000000..18a95620a --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Array.class.js.html @@ -0,0 +1,180 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +


+
+ +

TinyMCE_Array.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Array.class.js'

+ +

+ +
+ + + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Array.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:28 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ *
+ * The contents of this file will be wrapped in a class later on.
+ */
+
+/**
+ * Returns a cleared array, since some external libraries tend to extend the Array core object
+ * arrays needs to be cleaned from these extended functions. So this function simply sets any
+ * named properties back to null.
+ *
+ * @param {Array} Name/Value array to clear.
+ * @return Cleared name/value array.
+ * @type Array
+ */
+TinyMCE_Engine.prototype.clearArray = function(a) {
+	for (var k in a)
+		a[k] = null;
+
+	return a;
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Cleanup.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Cleanup.class.js.html new file mode 100644 index 000000000..9dee6db6f --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Cleanup.class.js.html @@ -0,0 +1,1480 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Cleanup.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Cleanup.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_Cleanup 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Cleanup.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:28 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ *
+ * Some of the contents of this file will be wrapped in a class later on it will also be replaced with the new cleanup logic.
+ */
+
+/**
+ * Makes some preprocessing cleanup routines on the specified HTML string.
+ * This includes forcing some tags to be open so MSIE doesn't fail. Forcing other to close and
+ * padding paragraphs with non breaking spaces. This function is used when the editor gets
+ * initialized with content.
+ *
+ * @param {string} s HTML string to cleanup.
+ * @return Cleaned HTML string.
+ * @type string
+ */
+TinyMCE_Engine.prototype.cleanupHTMLCode = function(s) {
+	s = s.replace(new RegExp('<p \\/>', 'gi'), '<p>&nbsp;</p>');
+	s = s.replace(new RegExp('<p>\\s*<\\/p>', 'gi'), '<p>&nbsp;</p>');
+
+	// Fix close BR elements
+	s = s.replace(new RegExp('<br>\\s*<\\/br>', 'gi'), '<br />');
+
+	// Open closed tags like <b/> to <b></b>
+	s = s.replace(new RegExp('<(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|b|font|em|strong|i|strike|u|span|a|ul|ol|li|blockquote)([a-z]*)([^\\\\|>]*)\\/>', 'gi'), '<$1$2$3></$1$2>');
+
+	// Remove trailing space <b > to <b>
+	s = s.replace(new RegExp('\\s+></', 'gi'), '></');
+
+	// Close tags <img></img> to <img/>
+	s = s.replace(new RegExp('<(img|br|hr)([^>]*)><\\/(img|br|hr)>', 'gi'), '<$1$2 />');
+
+	// Weird MSIE bug, <p><hr /></p> breaks runtime?
+	if (tinyMCE.isMSIE)
+		s = s.replace(new RegExp('<p><hr \\/><\\/p>', 'gi'), "<hr>");
+
+	// Convert relative anchors to absolute URLs ex: #something to file.htm#something
+	if (tinyMCE.getParam('convert_urls'))
+		s = s.replace(new RegExp('(href=\"{0,1})(\\s*#)', 'gi'), '$1' + tinyMCE.settings['document_base_url'] + "#");
+
+	return s;
+};
+
+/**
+ * Parses the specified HTML style data. This will parse for example
+ * "border-left: 1px; background-color: red" into an key/value array.
+ *
+ * @param {string} str Style data to parse.
+ * @return Name/Value array of style items.
+ * @type Array
+ */
+TinyMCE_Engine.prototype.parseStyle = function(str) {
+	var ar = new Array();
+
+	if (str == null)
+		return ar;
+
+	var st = str.split(';');
+
+	tinyMCE.clearArray(ar);
+
+	for (var i=0; i<st.length; i++) {
+		if (st[i] == '')
+			continue;
+
+		var re = new RegExp('^\\s*([^:]*):\\s*(.*)\\s*$');
+		var pa = st[i].replace(re, '$1||$2').split('||');
+//tinyMCE.debug(str, pa[0] + "=" + pa[1], st[i].replace(re, '$1||$2'));
+		if (pa.length == 2)
+			ar[pa[0].toLowerCase()] = pa[1];
+	}
+
+	return ar;
+};
+
+/**
+ * Compresses larger styles into a smaller. Since MSIE automaticly converts
+ * border: 1px solid red to border-left: 1px solid red, border-righ: 1px solid red and so forth.'
+ * This will bundle them together again if the information is the same in each item.
+ *
+ * @param {Array} ar Style name/value array with items.
+ * @param {string} pr Style item prefix to bundle for example border.
+ * @param {string} sf Style item suffix to bunlde for example -width or -width.
+ * @param {string} res Result name, for example border-width.
+ */
+TinyMCE_Engine.prototype.compressStyle = function(ar, pr, sf, res) {
+	var box = new Array();
+
+	box[0] = ar[pr + '-top' + sf];
+	box[1] = ar[pr + '-left' + sf];
+	box[2] = ar[pr + '-right' + sf];
+	box[3] = ar[pr + '-bottom' + sf];
+
+	for (var i=0; i<box.length; i++) {
+		if (box[i] == null)
+			return;
+
+		for (var a=0; a<box.length; a++) {
+			if (box[a] != box[i])
+				return;
+		}
+	}
+
+	// They are all the same
+	ar[res] = box[0];
+	ar[pr + '-top' + sf] = null;
+	ar[pr + '-left' + sf] = null;
+	ar[pr + '-right' + sf] = null;
+	ar[pr + '-bottom' + sf] = null;
+};
+
+/**
+ * Serializes the specified style item name/value array into a HTML string. This function
+ * will force HEX colors in Firefox and convert the URL items of a style correctly.
+ *
+ * @param {Array} ar Name/Value array of items to serialize.
+ * @return Serialized HTML string containing the items.
+ * @type string
+ */
+TinyMCE_Engine.prototype.serializeStyle = function(ar) {
+	var str = "";
+
+	// Compress box
+	tinyMCE.compressStyle(ar, "border", "", "border");
+	tinyMCE.compressStyle(ar, "border", "-width", "border-width");
+	tinyMCE.compressStyle(ar, "border", "-color", "border-color");
+	tinyMCE.compressStyle(ar, "border", "-style", "border-style");
+	tinyMCE.compressStyle(ar, "padding", "", "padding");
+	tinyMCE.compressStyle(ar, "margin", "", "margin");
+
+	for (var key in ar) {
+		var val = ar[key];
+
+		if (typeof(val) == 'function')
+			continue;
+
+		if (key.indexOf('mso-') == 0)
+			continue;
+
+		if (val != null && val != '') {
+			val = '' + val; // Force string
+
+			// Fix style URL
+			val = val.replace(new RegExp("url\\(\\'?([^\\']*)\\'?\\)", 'gi'), "url('$1')");
+
+			// Convert URL
+			if (val.indexOf('url(') != -1 && tinyMCE.getParam('convert_urls')) {
+				var m = new RegExp("url\\('(.*?)'\\)").exec(val);
+
+				if (m.length > 1)
+					val = "url('" + eval(tinyMCE.getParam('urlconverter_callback') + "(m[1], null, true);") + "')";
+			}
+
+			// Force HEX colors
+			if (tinyMCE.getParam("force_hex_style_colors"))
+				val = tinyMCE.convertRGBToHex(val, true);
+
+			if (val != "url('')")
+				str += key.toLowerCase() + ": " + val + "; ";
+		}
+	}
+
+	if (new RegExp('; $').test(str))
+		str = str.substring(0, str.length - 2);
+
+	return str;
+};
+
+/**
+ * Returns a hexadecimal version of the specified rgb(1,2,3) string.
+ *
+ * @param {string} s RGB string to parse, if this doesn't isn't a rgb(n,n,n) it will passthrough the string.
+ * @param {boolean} k Keep before/after contents. If enabled contents before after the rgb(n,n,n) will be intact.
+ * @return Hexadecimal version of the specified rgb(1,2,3) string.
+ * @type string
+ */
+TinyMCE_Engine.prototype.convertRGBToHex = function(s, k) {
+	if (s.toLowerCase().indexOf('rgb') != -1) {
+		var re = new RegExp("(.*?)rgb\\s*?\\(\\s*?([0-9]+).*?,\\s*?([0-9]+).*?,\\s*?([0-9]+).*?\\)(.*?)", "gi");
+		var rgb = s.replace(re, "$1,$2,$3,$4,$5").split(',');
+		if (rgb.length == 5) {
+			r = parseInt(rgb[1]).toString(16);
+			g = parseInt(rgb[2]).toString(16);
+			b = parseInt(rgb[3]).toString(16);
+
+			r = r.length == 1 ? '0' + r : r;
+			g = g.length == 1 ? '0' + g : g;
+			b = b.length == 1 ? '0' + b : b;
+
+			s = "#" + r + g + b;
+
+			if (k)
+				s = rgb[0] + s + rgb[4];
+		}
+	}
+
+	return s;
+};
+
+/**
+ * Returns a rgb(n,n,n) string from a hexadecimal value.
+ *
+ * @param {string} s Hexadecimal string to parse.
+ * @return rgb(n,n,n) string from a hexadecimal value.
+ * @type string
+ */
+TinyMCE_Engine.prototype.convertHexToRGB = function(s) {
+	if (s.indexOf('#') != -1) {
+		s = s.replace(new RegExp('[^0-9A-F]', 'gi'), '');
+		return "rgb(" + parseInt(s.substring(0, 2), 16) + "," + parseInt(s.substring(2, 4), 16) + "," + parseInt(s.substring(4, 6), 16) + ")";
+	}
+
+	return s;
+};
+
+/**
+ * Converts span elements to font elements in the specified document instance.
+ * Todo: Move this function into a XHTML plugin or simmilar.
+ *
+ * @param {DOMDocument} doc Document instance to convert spans in.
+ */
+TinyMCE_Engine.prototype.convertSpansToFonts = function(doc) {
+	var sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');
+
+	var h = doc.body.innerHTML;
+	h = h.replace(/<span/gi, '<font');
+	h = h.replace(/<\/span/gi, '</font');
+	doc.body.innerHTML = h;
+
+	var s = doc.getElementsByTagName("font");
+	for (var i=0; i<s.length; i++) {
+		var size = tinyMCE.trim(s[i].style.fontSize).toLowerCase();
+		var fSize = 0;
+
+		for (var x=0; x<sizes.length; x++) {
+			if (sizes[x] == size) {
+				fSize = x + 1;
+				break;
+			}
+		}
+
+		if (fSize > 0) {
+			tinyMCE.setAttrib(s[i], 'size', fSize);
+			s[i].style.fontSize = '';
+		}
+
+		var fFace = s[i].style.fontFamily;
+		if (fFace != null && fFace != "") {
+			tinyMCE.setAttrib(s[i], 'face', fFace);
+			s[i].style.fontFamily = '';
+		}
+
+		var fColor = s[i].style.color;
+		if (fColor != null && fColor != "") {
+			tinyMCE.setAttrib(s[i], 'color', tinyMCE.convertRGBToHex(fColor));
+			s[i].style.color = '';
+		}
+	}
+};
+
+/**
+ * Convers fonts to spans in the specified document.
+ * Todo: Move this function into a XHTML plugin or simmilar.
+ *
+ * @param {DOMDocument} doc Document instance to convert fonts in.
+ */
+TinyMCE_Engine.prototype.convertFontsToSpans = function(doc) {
+	var sizes = tinyMCE.getParam('font_size_style_values').replace(/\s+/, '').split(',');
+
+	var h = doc.body.innerHTML;
+	h = h.replace(/<font/gi, '<span');
+	h = h.replace(/<\/font/gi, '</span');
+	doc.body.innerHTML = h;
+
+	var fsClasses = tinyMCE.getParam('font_size_classes');
+	if (fsClasses != '')
+		fsClasses = fsClasses.replace(/\s+/, '').split(',');
+	else
+		fsClasses = null;
+
+	var s = doc.getElementsByTagName("span");
+	for (var i=0; i<s.length; i++) {
+		var fSize, fFace, fColor;
+
+		fSize = tinyMCE.getAttrib(s[i], 'size');
+		fFace = tinyMCE.getAttrib(s[i], 'face');
+		fColor = tinyMCE.getAttrib(s[i], 'color');
+
+		if (fSize != "") {
+			fSize = parseInt(fSize);
+
+			if (fSize > 0 && fSize < 8) {
+				if (fsClasses != null)
+					tinyMCE.setAttrib(s[i], 'class', fsClasses[fSize-1]);
+				else
+					s[i].style.fontSize = sizes[fSize-1];
+			}
+
+			s[i].removeAttribute('size');
+		}
+
+		if (fFace != "") {
+			s[i].style.fontFamily = fFace;
+			s[i].removeAttribute('face');
+		}
+
+		if (fColor != "") {
+			s[i].style.color = fColor;
+			s[i].removeAttribute('color');
+		}
+	}
+};
+
+/**
+ * Moves the contents of a anchor outside and after the anchor. Only if the anchor doesn't
+ * have a href.
+ *
+ * @param {DOMDocument} doc DOM document instance to fix anchors in.
+ */
+TinyMCE_Engine.prototype.cleanupAnchors = function(doc) {
+	var i, cn, x, an = doc.getElementsByTagName("a");
+
+	// Loops backwards due to bug #1467987
+	for (i=an.length-1; i>=0; i--) {
+		if (tinyMCE.getAttrib(an[i], "name") != "" && tinyMCE.getAttrib(an[i], "href") == "") {
+			cn = an[i].childNodes;
+
+			for (x=cn.length-1; x>=0; x--)
+				tinyMCE.insertAfter(cn[x], an[i]);
+		}
+	}
+};
+
+/**
+ * Returns the HTML contents of the specified editor instance id.
+ *
+ * @param {string} editor_id Editor instance id to retrive HTML code from.
+ * @return HTML contents of editor id or null if it wasn't found.
+ * @type string
+ */
+TinyMCE_Engine.prototype.getContent = function(editor_id) {
+	var h;
+
+	if (typeof(editor_id) != "undefined")
+		tinyMCE.selectedInstance = tinyMCE.getInstanceById(editor_id);
+
+	if (tinyMCE.selectedInstance) {
+		h = tinyMCE._cleanupHTML(this.selectedInstance, this.selectedInstance.getDoc(), tinyMCE.settings, this.selectedInstance.getBody(), false, true);
+
+		// When editing always use fonts internaly
+		if (tinyMCE.getParam("convert_fonts_to_spans"))
+			tinyMCE.convertSpansToFonts(this.selectedInstance.getDoc());
+
+		return h;
+	}
+
+	return null;
+};
+
+/**
+ * Fixes invalid ul/ol elements so the document is more XHTML valid.
+ *
+ * @param {DOMDocument} d HTML DOM document to fix list elements in.
+ * @private
+ */
+TinyMCE_Engine.prototype._fixListElements = function(d) {
+	var nl, x, a = ['ol', 'ul'], i, n, p, r = new RegExp('^(OL|UL)$'), np;
+
+	for (x=0; x<a.length; x++) {
+		nl = d.getElementsByTagName(a[x]);
+
+		for (i=0; i<nl.length; i++) {
+			n = nl[i];
+			p = n.parentNode;
+
+			if (r.test(p.nodeName)) {
+				np = tinyMCE.prevNode(n, 'LI');
+
+				if (!np) {
+					np = d.createElement('li');
+					np.innerHTML = '&nbsp;';
+					np.appendChild(n);
+					p.insertBefore(np, p.firstChild);
+				} else
+					np.appendChild(n);
+			}
+		}
+	}
+};
+
+/**
+ * Moves table elements out of block elements to produce more valid XHTML.
+ *
+ * @param {DOMDocument} d HTML DOM document to fix list elements in.
+ * @private
+ */
+TinyMCE_Engine.prototype._fixTables = function(d) {
+	var nl, i, n, p, np, x, t;
+
+	nl = d.getElementsByTagName('table');
+	for (i=0; i<nl.length; i++) {
+		n = nl[i];
+
+		if ((p = tinyMCE.getParentElement(n, 'p,div,h1,h2,h3,h4,h5,h6')) != null) {
+			np = p.cloneNode(false);
+			np.removeAttribute('id');
+
+			t = n;
+
+			while ((n = n.nextSibling))
+				np.appendChild(n);
+
+			tinyMCE.insertAfter(np, p);
+			tinyMCE.insertAfter(t, p);
+		}
+	}
+};
+
+/**
+ * Performces cleanup of the contents of the specified instance.
+ * Todo: Finish documentation, and remove useless parameters.
+ *
+ * @param {TinyMCE_Control} inst Editor instance.
+ * @param {DOMDocument} doc ...
+ * @param {Array} config ...
+ * @param {HTMLElement} elm ...
+ * @param {boolean} visual ...
+ * @param {boolean} on_save ...
+ * @param {boolean} on_submit ...
+ * @return Cleaned HTML contents of editor instance.
+ * @type string
+ * @private
+ */
+TinyMCE_Engine.prototype._cleanupHTML = function(inst, doc, config, elm, visual, on_save, on_submit) {
+	var h, d, t1, t2, t3, t4, t5, c, s;
+
+	if (!tinyMCE.getParam('cleanup'))
+		return elm.innerHTML;
+
+	on_save = typeof(on_save) == 'undefined' ? false : on_save;
+
+	c = inst.cleanup;
+	s = inst.settings;
+	d = c.settings.debug;
+
+	if (d)
+		t1 = new Date().getTime();
+
+	if (tinyMCE.getParam("convert_fonts_to_spans"))
+		tinyMCE.convertFontsToSpans(doc);
+
+	if (tinyMCE.getParam("fix_list_elements"))
+		tinyMCE._fixListElements(doc);
+
+	if (tinyMCE.getParam("fix_table_elements"))
+		tinyMCE._fixTables(doc);
+
+	// Call custom cleanup code
+	tinyMCE._customCleanup(inst, on_save ? "get_from_editor_dom" : "insert_to_editor_dom", doc.body);
+
+	if (d)
+		t2 = new Date().getTime();
+
+	c.settings.on_save = on_save;
+	//for (var i=0; i<100; i++)
+
+	c.idCount = 0;
+	c.serializationId++;
+	c.serializedNodes = new Array();
+	c.sourceIndex = -1;
+
+	if (s.cleanup_serializer == "xml")
+		h = c.serializeNodeAsXML(elm);
+	else
+		h = c.serializeNodeAsHTML(elm);
+
+	if (d)
+		t3 = new Date().getTime();
+
+	// Post processing
+	h = h.replace(/<\/?(body|head|html)[^>]*>/gi, '');
+	h = h.replace(new RegExp(' (rowspan="1"|colspan="1")', 'g'), '');
+	h = h.replace(/<p><hr \/><\/p>/g, '<hr />');
+	h = h.replace(/<p>(&nbsp;|&#160;)<\/p><hr \/><p>(&nbsp;|&#160;)<\/p>/g, '<hr />');
+	h = h.replace(/<td>\s*<br \/>\s*<\/td>/g, '<td>&nbsp;</td>');
+	h = h.replace(/<p>\s*<br \/>\s*<\/p>/g, '<p>&nbsp;</p>');
+	h = h.replace(/<p>\s*(&nbsp;|&#160;)\s*<br \/>\s*(&nbsp;|&#160;)\s*<\/p>/g, '<p>&nbsp;</p>');
+	h = h.replace(/<p>\s*(&nbsp;|&#160;)\s*<br \/>\s*<\/p>/g, '<p>&nbsp;</p>');
+	h = h.replace(/<p>\s*<br \/>\s*&nbsp;\s*<\/p>/g, '<p>&nbsp;</p>');
+	h = h.replace(new RegExp('<a>(.*?)<\\/a>', 'g'), '$1');
+	h = h.replace(/<p([^>]*)>\s*<\/p>/g, '<p$1>&nbsp;</p>');
+
+	// Clean body
+	if (/^\s*(<br \/>|<p>&nbsp;<\/p>|<p>&#160;<\/p>|<p><\/p>)\s*$/.test(h))
+		h = '';
+
+	// If preformatted
+	if (s.preformatted) {
+		h = h.replace(/^<pre>/, '');
+		h = h.replace(/<\/pre>$/, '');
+		h = '<pre>' + h + '</pre>';
+	}
+
+	// Gecko specific processing
+	if (tinyMCE.isGecko) {
+		h = h.replace(/<o:p _moz-userdefined="" \/>/g, '');
+		h = h.replace(/<td([^>]*)>\s*<br \/>\s*<\/td>/g, '<td$1>&nbsp;</td>');
+	}
+
+	if (s.force_br_newlines)
+		h = h.replace(/<p>(&nbsp;|&#160;)<\/p>/g, '<br />');
+
+	// Call custom cleanup code
+	h = tinyMCE._customCleanup(inst, on_save ? "get_from_editor" : "insert_to_editor", h);
+
+	// Remove internal classes
+	if (on_save) {
+		h = h.replace(new RegExp(' ?(mceItem[a-zA-Z0-9]*|' + s.visual_table_class + ')', 'g'), '');
+		h = h.replace(new RegExp(' ?class=""', 'g'), '');
+	}
+
+	if (s.remove_linebreaks && !c.settings.indent)
+		h = h.replace(/\n|\r/g, ' ');
+
+	if (d)
+		t4 = new Date().getTime();
+
+	if (on_save && c.settings.indent)
+		h = c.formatHTML(h);
+
+	// If encoding (not recommended option)
+	if (on_submit && (s.encoding == "xml" || s.encoding == "html"))
+		h = c.xmlEncode(h);
+
+	if (d)
+		t5 = new Date().getTime();
+
+	if (c.settings.debug)
+		tinyMCE.debug("Cleanup in ms: Pre=" + (t2-t1) + ", Serialize: " + (t3-t2) + ", Post: " + (t4-t3) + ", Format: " + (t5-t4) + ", Sum: " + (t5-t1) + ".");
+
+	return h;
+};
+
+/**
+ * TinyMCE_Cleanup class.
+ */
+function TinyMCE_Cleanup() {
+	this.isMSIE = (navigator.appName == "Microsoft Internet Explorer");
+	this.rules = tinyMCE.clearArray(new Array());
+
+	// Default config
+	this.settings = {
+		indent_elements : 'head,table,tbody,thead,tfoot,form,tr,ul,ol,blockquote,object',
+		newline_before_elements : 'h1,h2,h3,h4,h5,h6,pre,address,div,ul,ol,li,meta,option,area,title,link,base,script,td',
+		newline_after_elements : 'br,hr,p,pre,address,div,ul,ol,meta,option,area,link,base,script',
+		newline_before_after_elements : 'html,head,body,table,thead,tbody,tfoot,tr,form,ul,ol,blockquote,p,object,param,hr,div',
+		indent_char : '\t',
+		indent_levels : 1,
+		entity_encoding : 'raw',
+		valid_elements : '*[*]',
+		entities : '',
+		url_converter : '',
+		invalid_elements : '',
+		verify_html : false
+	};
+
+	this.vElements = tinyMCE.clearArray(new Array());
+	this.vElementsRe = '';
+	this.closeElementsRe = /^(IMG|BR|HR|LINK|META|BASE|INPUT|BUTTON|AREA)$/;
+	this.codeElementsRe = /^(SCRIPT|STYLE)$/;
+	this.serializationId = 0;
+	this.mceAttribs = {
+		href : 'mce_href',
+		src : 'mce_src',
+		type : 'mce_type'
+	};
+}
+
+TinyMCE_Cleanup.prototype = {
+	/**
+	 * Initializes the cleanup engine with the specified config.
+	 *
+	 * @param {Array} s Name/Value array with config settings.
+	 */
+	init : function(s) {
+		var n, a, i, ir, or, st;
+
+		for (n in s)
+			this.settings[n] = s[n];
+
+		// Setup code formating
+		s = this.settings;
+
+		// Setup regexps
+		this.inRe = this._arrayToRe(s.indent_elements.split(','), '', '^<(', ')[^>]*');
+		this.ouRe = this._arrayToRe(s.indent_elements.split(','), '', '^<\\/(', ')[^>]*');
+		this.nlBeforeRe = this._arrayToRe(s.newline_before_elements.split(','), 'gi', '<(',  ')([^>]*)>');
+		this.nlAfterRe = this._arrayToRe(s.newline_after_elements.split(','), 'gi', '<(',  ')([^>]*)>');
+		this.nlBeforeAfterRe = this._arrayToRe(s.newline_before_after_elements.split(','), 'gi', '<(\\/?)(', ')([^>]*)>');
+
+		if (s.invalid_elements != '')
+			this.iveRe = this._arrayToRe(s.invalid_elements.toUpperCase().split(','), 'g', '^(', ')$');
+		else
+			this.iveRe = null;
+
+		// Setup separator
+		st = '';
+		for (i=0; i<s.indent_levels; i++)
+			st += s.indent_char;
+
+		this.inStr = st;
+
+		// If verify_html if false force *[*]
+		if (!s.verify_html) {
+			s.valid_elements = '*[*]';
+			s.extended_valid_elements = '';
+		}
+
+		this.fillStr = s.entity_encoding == "named" ? "&nbsp;" : "&#160;";
+		this.idCount = 0;
+	},
+
+	/**
+	 * Adds a cleanup rule string, for example: a[href|name|title=title|class=class1?class2?class3].
+	 * These rules are then used when serializing the DOM tree as a HTML string, it gives the possibility
+	 * to control the valid elements and attributes and force attribute values or default them.
+	 *
+	 * @param {string} s Rule string to parse and add to the cleanup rules array.
+	 */
+	addRuleStr : function(s) {
+		var r = this.parseRuleStr(s);
+		var n;
+
+		for (n in r) {
+			if (r[n])
+				this.rules[n] = r[n];
+		}
+
+		this.vElements = tinyMCE.clearArray(new Array());
+
+		for (n in this.rules) {
+			if (this.rules[n])
+				this.vElements[this.vElements.length] = this.rules[n].tag;
+		}
+
+		this.vElementsRe = this._arrayToRe(this.vElements, '');
+	},
+
+	/**
+	 * Parses a cleanup rule string, for example: a[href|name|title=title|class=class1?class2?class3].
+	 * These rules are then used when serializing the DOM tree as a HTML string, it gives the possibility
+	 * to control the valid elements and attributes and force attribute values or default them.
+	 *
+	 * @param {string} s Rule string to parse as a name/value rule array.
+	 * @return Parsed name/value rule array.
+	 * @type Array
+	 */
+	parseRuleStr : function(s) {
+		var ta, p, r, a, i, x, px, t, tn, y, av, or = tinyMCE.clearArray(new Array()), dv;
+
+		if (s == null || s.length == 0)
+			return or;
+
+		ta = s.split(',');
+		for (x=0; x<ta.length; x++) {
+			s = ta[x];
+			if (s.length == 0)
+				continue;
+
+			// Split tag/attrs
+			p = this.split(/\[|\]/, s);
+			if (p == null || p.length < 1)
+				t = s.toUpperCase();
+			else
+				t = p[0].toUpperCase();
+
+			// Handle all tag names
+			tn = this.split('/', t);
+			for (y=0; y<tn.length; y++) {
+				r = {};
+
+				r.tag = tn[y];
+				r.forceAttribs = null;
+				r.defaultAttribs = null;
+				r.validAttribValues = null;
+
+				// Handle prefixes
+				px = r.tag.charAt(0);
+				r.forceOpen = px == '+';
+				r.removeEmpty = px == '-';
+				r.fill = px == '#';
+				r.tag = r.tag.replace(/\+|-|#/g, '');
+				r.oTagName = tn[0].replace(/\+|-|#/g, '').toLowerCase();
+				r.isWild = new RegExp('\\*|\\?|\\+', 'g').test(r.tag);
+				r.validRe = new RegExp(this._wildcardToRe('^' + r.tag + '$'));
+
+				// Setup valid attributes
+				if (p.length > 1) {
+					r.vAttribsRe = '^(';
+					a = this.split(/\|/, p[1]);
+
+					for (i=0; i<a.length; i++) {
+						t = a[i];
+
+						av = new RegExp('(=|:|<)(.*?)$').exec(t);
+						t = t.replace(new RegExp('(=|:|<).*?$'), '');
+						if (av && av.length > 0) {
+							if (av[0].charAt(0) == ':') {
+								if (!r.forceAttribs)
+									r.forceAttribs = tinyMCE.clearArray(new Array());
+
+								r.forceAttribs[t.toLowerCase()] = av[0].substring(1);
+							} else if (av[0].charAt(0) == '=') {
+								if (!r.defaultAttribs)
+									r.defaultAttribs = tinyMCE.clearArray(new Array());
+
+								dv = av[0].substring(1);
+
+								r.defaultAttribs[t.toLowerCase()] = dv == "" ? "mce_empty" : dv;
+							} else if (av[0].charAt(0) == '<') {
+								if (!r.validAttribValues)
+									r.validAttribValues = tinyMCE.clearArray(new Array());
+
+								r.validAttribValues[t.toLowerCase()] = this._arrayToRe(this.split('?', av[0].substring(1)), '');
+							}
+						}
+
+						r.vAttribsRe += '' + t.toLowerCase() + (i != a.length - 1 ? '|' : '');
+
+						a[i] = t.toLowerCase();
+					}
+
+					r.vAttribsRe += ')$';
+					r.vAttribsRe = this._wildcardToRe(r.vAttribsRe);
+					r.vAttribsReIsWild = new RegExp('\\*|\\?|\\+', 'g').test(r.vAttribsRe);
+					r.vAttribsRe = new RegExp(r.vAttribsRe);
+					r.vAttribs = a.reverse();
+
+					//tinyMCE.debug(r.tag, r.oTagName, r.vAttribsRe, r.vAttribsReWC);
+				} else {
+					r.vAttribsRe = '';
+					r.vAttribs = tinyMCE.clearArray(new Array());
+					r.vAttribsReIsWild = false;
+				}
+
+				or[r.tag] = r;
+			}
+		}
+
+		return or;
+	},
+
+	/**
+	 * Serializes the specified node as a HTML string. This uses the XML parser and serializer
+	 * to generate a XHTML string.
+	 *
+	 * @param {HTMLNode} n Node to serialize as a XHTML string.
+	 * @return Serialized XHTML string based on specified node.
+	 * @type string
+	 */
+	serializeNodeAsXML : function(n) {
+		var s, b;
+
+		if (!this.xmlDoc) {
+			if (this.isMSIE) {
+				try {this.xmlDoc = new ActiveXObject('MSXML2.DOMDocument');} catch (e) {}
+
+				if (!this.xmlDoc)
+					try {this.xmlDoc = new ActiveXObject('Microsoft.XmlDom');} catch (e) {}
+			} else
+				this.xmlDoc = document.implementation.createDocument('', '', null);
+
+			if (!this.xmlDoc)
+				alert("Error XML Parser could not be found.");
+		}
+
+		if (this.xmlDoc.firstChild)
+			this.xmlDoc.removeChild(this.xmlDoc.firstChild);
+
+		b = this.xmlDoc.createElement("html");
+		b = this.xmlDoc.appendChild(b);
+
+		this._convertToXML(n, b);
+
+		if (this.isMSIE)
+			return this.xmlDoc.xml;
+		else
+			return new XMLSerializer().serializeToString(this.xmlDoc);
+	},
+
+	/**
+	 * Converts and adds the specified HTML DOM node to a XML DOM node.
+	 *
+	 * @param {HTMLNode} n HTML Node to add as a XML node.
+	 * @param {XMLNode} xn XML Node to add the HTML node to.
+	 * @private
+	 */
+	_convertToXML : function(n, xn) {
+		var xd, el, i, l, cn, at, no, hc = false;
+
+		if (this._isDuplicate(n))
+			return;
+
+		xd = this.xmlDoc;
+
+		switch (n.nodeType) {
+			case 1: // Element
+				hc = n.hasChildNodes();
+
+				el = xd.createElement(n.nodeName.toLowerCase());
+
+				at = n.attributes;
+				for (i=at.length-1; i>-1; i--) {
+					no = at[i];
+
+					if (no.specified && no.nodeValue)
+						el.setAttribute(no.nodeName.toLowerCase(), no.nodeValue);
+				}
+
+				if (!hc && !this.closeElementsRe.test(n.nodeName))
+					el.appendChild(xd.createTextNode(""));
+
+				xn = xn.appendChild(el);
+				break;
+
+			case 3: // Text
+				xn.appendChild(xd.createTextNode(n.nodeValue));
+				return;
+
+			case 8: // Comment
+				xn.appendChild(xd.createComment(n.nodeValue));
+				return;
+		}
+
+		if (hc) {
+			cn = n.childNodes;
+
+			for (i=0, l=cn.length; i<l; i++)
+				this._convertToXML(cn[i], xn);
+		}
+	},
+
+	/**
+	 * Serializes the specified node as a XHTML string. This uses the TinyMCE serializer logic since it gives more
+	 * control over the output than the build in browser XML serializer.
+	 *
+	 * @param {HTMLNode} n Node to serialize as a XHTML string.
+	 * @return Serialized XHTML string based on specified node.
+	 * @type string
+	 */
+	serializeNodeAsHTML : function(n) {
+		var en, no, h = '', i, l, r, cn, va = false, f = false, at, hc;
+
+		this._setupRules(); // Will initialize cleanup rules
+
+		if (this._isDuplicate(n))
+			return '';
+
+		switch (n.nodeType) {
+			case 1: // Element
+				hc = n.hasChildNodes();
+
+				// MSIE sometimes produces <//tag>
+				if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && n.nodeName.indexOf('/') != -1)
+					break;
+
+				if (this.vElementsRe.test(n.nodeName) && (!this.iveRe || !this.iveRe.test(n.nodeName))) {
+					va = true;
+
+					r = this.rules[n.nodeName];
+					if (!r) {
+						at = this.rules;
+						for (no in at) {
+							if (at[no] && at[no].validRe.test(n.nodeName)) {
+								r = at[no];
+								break;
+							}
+						}
+					}
+
+					en = r.isWild ? n.nodeName.toLowerCase() : r.oTagName;
+					f = r.fill;
+
+					if (r.removeEmpty && !hc)
+						return "";
+
+					h += '<' + en;
+
+					if (r.vAttribsReIsWild) {
+						// Serialize wildcard attributes
+						at = n.attributes;
+						for (i=at.length-1; i>-1; i--) {
+							no = at[i];
+							if (no.specified && r.vAttribsRe.test(no.nodeName))
+								h += this._serializeAttribute(n, r, no.nodeName);
+						}
+					} else {
+						// Serialize specific attributes
+						for (i=r.vAttribs.length-1; i>-1; i--)
+							h += this._serializeAttribute(n, r, r.vAttribs[i]);
+					}
+
+					// Serialize mce_ atts
+					if (!this.settings.on_save) {
+						at = this.mceAttribs;
+
+						for (no in at) {
+							if (at[no])
+								h += this._serializeAttribute(n, r, at[no]);
+						}
+					}
+
+					// Close these
+					if (this.closeElementsRe.test(n.nodeName))
+						return h + ' />';
+
+					h += '>';
+
+					if (this.isMSIE && this.codeElementsRe.test(n.nodeName))
+						h += n.innerHTML;
+				}
+			break;
+
+			case 3: // Text
+				if (n.parentNode && this.codeElementsRe.test(n.parentNode.nodeName))
+					return this.isMSIE ? '' : n.nodeValue;
+
+				return this.xmlEncode(n.nodeValue);
+
+			case 8: // Comment
+				return "<!--" + this._trimComment(n.nodeValue) + "-->";
+		}
+
+		if (hc) {
+			cn = n.childNodes;
+
+			for (i=0, l=cn.length; i<l; i++)
+				h += this.serializeNodeAsHTML(cn[i]);
+		}
+
+		// Fill empty nodes
+		if (f && !hc)
+			h += this.fillStr;
+
+		// End element
+		if (va)
+			h += '</' + en + '>';
+
+		return h;
+	},
+
+	/**
+	 * Serializes the specified attribute as a XHTML string chunk.
+	 *
+	 * @param {HTMLNode} n HTML node to get attribute from.
+	 * @param {TinyMCE_CleanupRule} r Cleanup rule to use in serialization.
+	 * @param {string} an Attribute name to lookfor and serialize.
+	 * @return XHTML chunk containing attribute data if it was found.
+	 * @type string
+	 * @private
+	 */
+	_serializeAttribute : function(n, r, an) {
+		var av = '', t, os = this.settings.on_save;
+
+		if (os && (an.indexOf('mce_') == 0 || an.indexOf('_moz') == 0))
+			return '';
+
+		if (os && this.mceAttribs[an])
+			av = this._getAttrib(n, this.mceAttribs[an]);
+
+		if (av.length == 0)
+			av = this._getAttrib(n, an);
+
+		if (av.length == 0 && r.defaultAttribs && (t = r.defaultAttribs[an])) {
+			av = t;
+
+			if (av == "mce_empty")
+				return " " + an + '=""';
+		}
+
+		if (r.forceAttribs && (t = r.forceAttribs[an]))
+			av = t;
+
+		if (os && av.length != 0 && this.settings.url_converter.length != 0 && /^(src|href|longdesc)$/.test(an))
+			av = eval(this.settings.url_converter + '(this, n, av)');
+
+		if (av.length != 0 && r.validAttribValues && r.validAttribValues[an] && !r.validAttribValues[an].test(av))
+			return "";
+
+		if (av.length != 0 && av == "{$uid}")
+			av = "uid_" + (this.idCount++);
+
+		if (av.length != 0)
+			return " " + an + "=" + '"' + this.xmlEncode(av) + '"';
+
+		return "";
+	},
+
+	/**
+	 * Applies source formatting/indentation on the specified HTML string.
+	 *
+	 * @param {string} h HTML string to apply formatting to.
+	 * @return Formatted HTML string.
+	 * @type string
+	 */
+	formatHTML : function(h) {
+		var s = this.settings, p = '', i = 0, li = 0, o = '', l;
+
+		h = h.replace(/\r/g, ''); // Windows sux, isn't carriage return a thing of the past :)
+		h = '\n' + h;
+		h = h.replace(new RegExp('\\n\\s+', 'gi'), '\n'); // Remove previous formatting
+		h = h.replace(this.nlBeforeRe, '\n<$1$2>');
+		h = h.replace(this.nlAfterRe, '<$1$2>\n');
+		h = h.replace(this.nlBeforeAfterRe, '\n<$1$2$3>\n');
+		h += '\n';
+
+		//tinyMCE.debug(h);
+
+		while ((i = h.indexOf('\n', i + 1)) != -1) {
+			if ((l = h.substring(li + 1, i)).length != 0) {
+				if (this.ouRe.test(l) && p.length >= s.indent_levels)
+					p = p.substring(s.indent_levels);
+
+				o += p + l + '\n';
+	
+				if (this.inRe.test(l))
+					p += this.inStr;
+			}
+
+			li = i;
+		}
+
+		//tinyMCE.debug(h);
+
+		return o;
+	},
+
+	/**
+	 * XML Encodes the specified string based on configured entity encoding. The entity encoding modes
+	 * are raw, numeric and named. Where raw is the fastest and named is default.
+	 *
+	 * @param {string} s String to convert to XML.
+	 * @return Encoded XML string based on configured entity encoding.
+	 * @type string
+	 */
+	xmlEncode : function(s) {
+		var i, l, e, o = '', c;
+
+		this._setupEntities(); // Will intialize lookup table
+
+		switch (this.settings.entity_encoding) {
+			case "raw":
+				return tinyMCE.xmlEncode(s);
+
+			case "named":
+				for (i=0, l=s.length; i<l; i++) {
+					c = s.charCodeAt(i);
+					e = this.entities[c];
+
+					if (e && e != '')
+						o += '&' + e + ';';
+					else
+						o += String.fromCharCode(c);
+				}
+
+				return o;
+
+			case "numeric":
+				for (i=0, l=s.length; i<l; i++) {
+					c = s.charCodeAt(i);
+
+					if (c > 127 || c == 60 || c == 62 || c == 38 || c == 39 || c == 34)
+						o += '&#' + c + ";";
+					else
+						o += String.fromCharCode(c);
+				}
+
+				return o;
+		}
+
+		return s;
+	},
+
+	/**
+	 * Splits the specified string and removed empty chunks.
+	 *
+	 * @param {RegEx} re RegEx to split string by.
+	 * @param {string} s String value to split.
+	 * @return Array with parts from specified string.
+	 * @type string
+	 */
+	split : function(re, s) {
+		var c = s.split(re);
+		var i, l, o = new Array();
+
+		for (i=0, l=c.length; i<l; i++) {
+			if (c[i] != '')
+				o[i] = c[i];
+		}
+
+		return o;
+	},
+
+	/**
+	 * Removes contents that got added by TinyMCE to comments.
+	 *
+	 * @param {string} s Comment string data to trim.
+	 * @return Cleaned string from TinyMCE specific content.
+	 * @type string
+	 * @private
+	 */
+	_trimComment : function(s) {
+		// Remove mce_src, mce_href
+		s = s.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), "");
+		s = s.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), "");
+
+		return s;
+	},
+
+	/**
+	 * Returns the value of the specified attribute name or default value if it wasn't found.
+	 *
+	 * @param {HTMLElement} e HTML element to get attribute from.
+	 * @param {string} n Attribute name to get from element.
+	 * @param {string} d Default value to return if attribute wasn't found.
+	 * @return Attribute value based on specified attribute name.
+	 * @type string
+	 * @private
+	 */
+	_getAttrib : function(e, n, d) {
+		if (typeof(d) == "undefined")
+			d = "";
+
+		if (!e || e.nodeType != 1)
+			return d;
+
+		var v = e.getAttribute(n, 0);
+
+		if (n == "class" && !v)
+			v = e.className;
+
+		if (this.isMSIE && n == "http-equiv")
+			v = e.httpEquiv;
+
+		if (this.isMSIE && e.nodeName == "FORM" && n == "enctype" && v == "application/x-www-form-urlencoded")
+			v = "";
+
+		if (this.isMSIE && e.nodeName == "INPUT" && n == "size" && v == "20")
+			v = "";
+
+		if (this.isMSIE && e.nodeName == "INPUT" && n == "maxlength" && v == "2147483647")
+			v = "";
+
+		if (n == "style" && !tinyMCE.isOpera)
+			v = e.style.cssText;
+
+		if (n == 'style')
+			v = tinyMCE.serializeStyle(tinyMCE.parseStyle(v));
+
+		if (this.settings.on_save && n.indexOf('on') != -1 && this.settings.on_save && v && v != "")
+			v = tinyMCE.cleanupEventStr(v);
+
+		return (v && v != "") ? '' + v : d;
+	},
+
+	/**
+	 * Internal URL converter callback function. This simply converts URLs based
+	 * on some settings.
+	 *
+	 * @param {TinyMCE_Cleanup} c Cleanup instance.
+	 * @param {HTMLNode} n HTML node that holds the URL.
+	 * @param {string} v URL value to convert.
+	 * @return Converted URL value.
+	 * @type string
+	 * @private
+	 */
+	_urlConverter : function(c, n, v) {
+		if (!c.settings.on_save)
+			return tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings.base_href, v);
+		else if (tinyMCE.getParam('convert_urls'))
+			return eval(tinyMCE.settings.urlconverter_callback + "(v, n, true);");
+
+		return v;
+	},
+
+	/**
+	 * Converts a array into a regex.
+	 *
+	 * @param {Array} a Array to convert into a regex.
+	 * @param {string} op RegEx options like, gi.
+	 * @param {string} be Before chunk, beginning of expression.
+	 * @param {string} af After chunk, end of expression.
+	 * @return RegEx instance based in input information.
+	 * @type string
+	 * @private
+	 */
+	_arrayToRe : function(a, op, be, af) {
+		var i, r;
+
+		op = typeof(op) == "undefined" ? "gi" : op;
+		be = typeof(be) == "undefined" ? "^(" : be;
+		af = typeof(af) == "undefined" ? ")$" : af;
+
+		r = be;
+
+		for (i=0; i<a.length; i++)
+			r += this._wildcardToRe(a[i]) + (i != a.length-1 ? "|" : "");
+
+		r += af;
+
+		return new RegExp(r, op);
+	},
+
+	/**
+	 * Converts a wildcard string into a regex.
+	 *
+	 * @param {string} s Wildcard string to convert into RegEx.
+	 * @return RegEx string based on input.
+	 * @type string
+	 * @private
+	 */
+	_wildcardToRe : function(s) {
+		s = s.replace(/\?/g, '(\\S?)');
+		s = s.replace(/\+/g, '(\\S+)');
+		s = s.replace(/\*/g, '(\\S*)');
+
+		return s;
+	},
+
+	/**
+	 * Sets up the entity name lookup table ones. This moves the entity lookup pasing time
+	 * from init to first xmlEncode call.
+	 *
+	 * @private
+	 */
+	_setupEntities : function() {
+		var n, a, i, s = this.settings;
+
+		// Setup entities
+		if (!this.entitiesDone) {
+			if (s.entity_encoding == "named") {
+				n = tinyMCE.clearArray(new Array());
+				a = this.split(',', s.entities);
+				for (i=0; i<a.length; i+=2)
+					n[a[i]] = a[i+1];
+
+				this.entities = n;
+			}
+
+			this.entitiesDone = true;
+		}
+	},
+
+	/**
+	 * Sets up the cleanup rules ones. This moves the cleanup rule pasing time
+	 * from init to first cleanup call.
+	 *
+	 * @private
+	 */
+	_setupRules : function() {
+		var s = this.settings;
+
+		// Setup default rule
+		if (!this.rulesDone) {
+			this.addRuleStr(s.valid_elements);
+			this.addRuleStr(s.extended_valid_elements);
+
+			this.rulesDone = true;
+		}
+	},
+
+	/**
+	 * Checks if the specified node is a duplicate in other words has it been processed/serialized before.
+	 *
+	 * @param {DOMNode} n DOM Node that is to be checked.
+	 * @return true/false if the node is a duplicate or not.
+	 * @type boolean
+	 * @private
+	 */
+	_isDuplicate : function(n) {
+		var i;
+
+		if (!this.settings.fix_content_duplication)
+			return false;
+
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera && n.nodeType == 1) {
+			// Mark elements
+			if (n.mce_serialized == this.serializationId)
+				return true;
+
+			n.setAttribute('mce_serialized', this.serializationId);
+		} else {
+			// Search lookup table for text nodes  and comments
+			for (i=0; i<this.serializedNodes.length; i++) {
+				if (this.serializedNodes[i] == n)
+					return true;
+			}
+
+			this.serializedNodes[this.serializedNodes.length] = n;
+		}
+
+		return false;
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Control.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Control.class.js.html new file mode 100644 index 000000000..04a04e439 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Control.class.js.html @@ -0,0 +1,1710 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Control.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Control.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_Control 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Control.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:28 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * This is the TinyMCE editor control instance class. A instance of this class will is made for each
+ * converted text area.
+ *
+ * @constructor
+ * @param {Array} settings Name/Value array of instance specific configuration settings.
+ */
+function TinyMCE_Control(settings) {
+	var t, i, to, fu, p, x, fn, fu, pn, s = settings;
+
+	this.undoRedoLevel = true;
+	this.isTinyMCE_Control = true;
+
+	// Default settings
+	this.settings = s;
+	this.settings['theme'] = tinyMCE.getParam("theme", "default");
+	this.settings['width'] = tinyMCE.getParam("width", -1);
+	this.settings['height'] = tinyMCE.getParam("height", -1);
+	this.selection = new TinyMCE_Selection(this);
+	this.undoRedo = new TinyMCE_UndoRedo(this);
+	this.cleanup = new TinyMCE_Cleanup();
+	this.shortcuts = new Array();
+	this.hasMouseMoved = false;
+
+	this.cleanup.init({
+		valid_elements : s.valid_elements,
+		extended_valid_elements : s.extended_valid_elements,
+		entities : s.entities,
+		entity_encoding : s.entity_encoding,
+		debug : s.cleanup_debug,
+		url_converter : 'TinyMCE_Cleanup.prototype._urlConverter',
+		indent : s.apply_source_formatting,
+		invalid_elements : s.invalid_elements,
+		verify_html : s.verify_html,
+		fix_content_duplication : s.fix_content_duplication
+	});
+
+	// Wrap old theme
+	t = this.settings['theme'];
+	if (!tinyMCE.hasTheme(t)) {
+		fn = tinyMCE.callbacks;
+		to = {};
+
+		for (i=0; i<fn.length; i++) {
+			if ((fu = window['TinyMCE_' + t + "_" + fn[i]]))
+				to[fn[i]] = fu;
+		}
+
+		tinyMCE.addTheme(t, to);
+	}
+
+	// Wrap old plugins
+	this.plugins = new Array();
+	p = tinyMCE.getParam('plugins', '', true, ',');
+	if (p.length > 0) {
+		for (i=0; i<p.length; i++) {
+			pn = p[i];
+
+			if (pn.charAt(0) == '-')
+				pn = pn.substring(1);
+
+			if (!tinyMCE.hasPlugin(pn)) {
+				fn = tinyMCE.callbacks;
+				to = {};
+
+				for (x=0; x<fn.length; x++) {
+					if ((fu = window['TinyMCE_' + pn + "_" + fn[x]]))
+						to[fn[x]] = fu;
+				}
+
+				tinyMCE.addPlugin(pn, to);
+			}
+
+			this.plugins[this.plugins.length] = pn; 
+		}
+	}
+};
+
+TinyMCE_Control.prototype = {
+	/**
+	 * Returns true/false if the instance has the current plugin available.
+	 *
+	 * @param {string} n Plugin name to check for.
+	 * @return true/false if the instance has the current plugin available.
+	 * @type boolean
+	 */
+	hasPlugin : function(n) {
+		var i;
+
+		for (i=0; i<this.plugins.length; i++) {
+			if (this.plugins[i] == n)
+				return true;
+		}
+
+		return false;
+	},
+
+	/**
+	 * Adds a plugin to the editor instance. This will also add it globaly.
+	 *
+	 * @param {string} n Plugin name to check for.
+	 * @param {TinyMCE_Plugin} n TinyMCE plugin instance.
+	 */
+	addPlugin : function(n, p) {
+		if (!this.hasPlugin(n)) {
+			tinyMCE.addPlugin(n, p);
+			this.plugins[this.plugins.length] = n;
+		}
+	},
+
+	/**
+	 * Repaints the editarea in Gecko browsers. This method removes ghost resize handlers
+	 * and other trailing graphics.
+	 */
+	repaint : function() {
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+			return;
+
+		try {
+			var s = this.selection;
+			var b = s.getBookmark(true);
+			this.getBody().style.display = 'none';
+			this.getDoc().execCommand('selectall', false, null);
+			this.getSel().collapseToStart();
+			this.getBody().style.display = 'block';
+			s.moveToBookmark(b);
+		} catch (ex) {
+			// Ignore
+		}
+	},
+
+	/**
+	 * Switches the global TinyMCE settings to the current instance settings. This method is
+	 * used to handle multiple configurations.
+	 */
+	switchSettings : function() {
+		if (tinyMCE.configs.length > 1 && tinyMCE.currentConfig != this.settings['index']) {
+			tinyMCE.settings = this.settings;
+			tinyMCE.currentConfig = this.settings['index'];
+		}
+	},
+
+	/**
+	 * Returns the body element of a editor instance.
+	 *
+	 * @return Body element of a editor instance.
+	 * @type HTMLElement
+	 */
+	getBody : function() {
+		return this.getDoc().body;
+	},
+
+	/**
+	 * Returns the DOM document of a editor instance.
+	 *
+	 * @return DOM document of a editor instance.
+	 * @type DOMDocument
+	 */
+	getDoc : function() {
+		return this.contentWindow.document;
+	},
+
+	/**
+	 * Returns the window of a editor instance.
+	 *
+	 * @return Window of a editor instance.
+	 * @type Window
+	 */
+	getWin : function() {
+		return this.contentWindow;
+	},
+
+	/**
+	 * Adds a keyboard shortcut to a specific command. These shortcuts can for example be added
+	 * at the initInstance callback of a plugin. The shortcut description can be a language variable name
+	 * or a string describing the function. If you don't specify a command, the shortcut will simply be a blocker
+	 * shortcut. This enables you to remove built in shortcuts or remove theme specific shortcuts from a plugin.<br />
+	 * Example shortcut inst.addShortcut('ctrl,alt', 'k', 'mceSomeCommand', false, 'somevalue');
+	 * Example blocker inst.addShortcut('ctrl,alt', 'k');
+	 *
+	 * @param {string} m List of shortcut modifiers keys, for example "ctrl,alt".
+	 * @param {Object} k Shortcut key char for example "s" or a keycode value "13".
+	 * @param {string} d Optional Shortcut description, this will be presented in the about dialog.
+	 * @param {string} cmd Optional Command name to execute, for example mceLink or Bold.
+	 * @param {boolean} ui Optional True/false state if a UI (dialog) should be presented or not.
+	 * @param {Object} va Optional command value, this can be anything.
+	 * @return true/false if the shortcut was added or not
+	 * @type boolean
+	 */
+	addShortcut : function(m, k, d, cmd, ui, va) {
+		var n = typeof(k) == "number", ie = tinyMCE.isMSIE, c, sc, i;
+		var scl = this.shortcuts;
+
+		if (!tinyMCE.getParam('custom_shortcuts'))
+			return false;
+
+		m = m.toLowerCase();
+		k = ie && !n ? k.toUpperCase() : k;
+		c = n ? null : k.charCodeAt(0);
+		d = d && d.indexOf('lang_') == 0 ? tinyMCE.getLang(d) : d;
+
+		sc = {
+			alt : m.indexOf('alt') != -1,
+			ctrl : m.indexOf('ctrl') != -1,
+			shift : m.indexOf('shift') != -1,
+			charCode : c,
+			keyCode : n ? k : (ie ? c : null),
+			desc : d,
+			cmd : cmd,
+			ui : ui,
+			val : va
+		};
+
+		for (i=0; i<scl.length; i++) {
+			if (sc.alt == scl[i].alt && sc.ctrl == scl[i].ctrl && sc.shift == scl[i].shift
+				&& sc.charCode == scl[i].charCode && sc.keyCode == scl[i].keyCode) {
+				return false;
+			}
+		}
+
+		scl[scl.length] = sc;
+
+		return true;
+	},
+
+	/**
+	 * Executes shortcuts based on the event information.
+	 *
+	 * @param {DOMEvent} e Keyboard event to handle.
+	 * @return true/false if the shortcut was found and executed or not.
+	 * @type boolean
+	 */
+	handleShortcut : function(e) {
+		var i, s = this.shortcuts, o;
+
+		for (i=0; i<s.length; i++) {
+			o = s[i];
+			if (o.alt == e.altKey && o.ctrl == e.ctrlKey && (o.keyCode == e.keyCode || o.charCode == e.charCode)) {
+				if (o.cmd && (e.type == "keydown" || (e.type == "keypress" && !tinyMCE.isOpera)))
+					tinyMCE.execCommand(o.cmd, o.ui, o.val);
+
+				tinyMCE.cancelEvent(e);
+				return true;
+			}
+		}
+
+		return false;
+	},
+
+	/**
+	 * Auto resets the design mode of the document if it gets lost.
+	 * This is a Gecko specific function since it's a workaround for a bug where Gecko browsers
+	 * loose the designMode state if the editor is hidden and shown in a tab or div.
+	 */
+	autoResetDesignMode : function() {
+		// Add fix for tab/style.display none/block problems in Gecko
+		if (!tinyMCE.isMSIE && this.isHidden() && tinyMCE.getParam('auto_reset_designmode'))
+			eval('try { this.getDoc().designMode = "On"; } catch(e) {}');
+	},
+
+	/**
+	 * Returns if the instance is hidden or not. This is a Gecko specific function
+	 * other browsers will always return false. This function is used to workaround the lost
+	 * designMode bug in Gecko browsers.
+	 *
+	 * @return Returns if the instance is hidden or not.
+	 * @type boolean
+	 */
+	isHidden : function() {
+		if (tinyMCE.isMSIE)
+			return false;
+
+		var s = this.getSel();
+
+		// Weird, wheres that cursor selection?
+		return (!s || !s.rangeCount || s.rangeCount == 0);
+	},
+
+	/**
+	 * Returns true/false if the editor instance is dirty or not. In other words if it has been modified
+	 * or not.
+	 *
+	 * @return Editor instance dirty state.
+	 * @type boolean
+	 */
+	isDirty : function() {
+		// Is content modified and not in a submit procedure
+		return this.startContent != tinyMCE.trim(this.getBody().innerHTML) && !tinyMCE.isNotDirty;
+	},
+
+	/**
+	 * ..
+	 *
+	 * @private
+	 */
+	_mergeElements : function(scmd, pa, ch, override) {
+		if (scmd == "removeformat") {
+			pa.className = "";
+			pa.style.cssText = "";
+			ch.className = "";
+			ch.style.cssText = "";
+			return;
+		}
+
+		var st = tinyMCE.parseStyle(tinyMCE.getAttrib(pa, "style"));
+		var stc = tinyMCE.parseStyle(tinyMCE.getAttrib(ch, "style"));
+		var className = tinyMCE.getAttrib(pa, "class");
+
+		className += " " + tinyMCE.getAttrib(ch, "class");
+
+		if (override) {
+			for (var n in st) {
+				if (typeof(st[n]) == 'function')
+					continue;
+
+				stc[n] = st[n];
+			}
+		} else {
+			for (var n in stc) {
+				if (typeof(stc[n]) == 'function')
+					continue;
+
+				st[n] = stc[n];
+			}
+		}
+
+		tinyMCE.setAttrib(pa, "style", tinyMCE.serializeStyle(st));
+		tinyMCE.setAttrib(pa, "class", tinyMCE.trim(className));
+		ch.className = "";
+		ch.style.cssText = "";
+		ch.removeAttribute("class");
+		ch.removeAttribute("style");
+	},
+
+	/**
+	 * Sets the useCSS mode in Gecko browsers. This will also remove the build in
+	 * inline table editing controls since they are buggy when it comes to col/rowspans.
+	 *
+	 * @param {boolean} b UseCSS state true/false.
+	 * @private
+	 */
+	_setUseCSS : function(b) {
+		var d = this.getDoc();
+
+		try {d.execCommand("useCSS", false, !b);} catch (ex) {}
+		try {d.execCommand("styleWithCSS", false, b);} catch (ex) {}
+
+		if (!tinyMCE.getParam("table_inline_editing"))
+			try {d.execCommand('enableInlineTableEditing', false, "false");} catch (ex) {}
+
+		if (!tinyMCE.getParam("object_resizing"))
+			try {d.execCommand('enableObjectResizing', false, "false");} catch (ex) {}
+	},
+
+	/**
+	 * Executes a command on the current instance. These commands can be TinyMCE internal commands prefixed with "mce" or
+	 * they can be build in browser commands such as "Bold". A compleate list of browser commands is available on MSDN or Mozilla.org.
+	 * This function will dispatch the execCommand function on each plugin, theme or the execcommand_callback option if none of these
+	 * return true it will handle the command as a internal browser command.
+	 *
+	 * @param {string} command Command name to execute, for example mceLink or Bold.
+	 * @param {boolean} user_interface True/false state if a UI (dialog) should be presented or not.
+	 * @param {mixed} value Optional command value, this can be anything.
+	 */
+	execCommand : function(command, user_interface, value) {
+		var doc = this.getDoc();
+		var win = this.getWin();
+		var focusElm = this.getFocusElement();
+
+		// Is non udno specific command
+		if (!new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command))
+			this.undoBookmark = null;
+
+		if (this.lastSafariSelection && !new RegExp('mceStartTyping|mceEndTyping|mceBeginUndoLevel|mceEndUndoLevel|mceAddUndoLevel', 'gi').test(command)) {
+			this.selection.moveToBookmark(this.lastSafariSelection);
+			tinyMCE.selectedElement = this.lastSafariSelectedElement;
+		}
+
+		// Mozilla issue
+		if (!tinyMCE.isMSIE && !this.useCSS) {
+			this._setUseCSS(false);
+			this.useCSS = true;
+		}
+
+		//debug("command: " + command + ", user_interface: " + user_interface + ", value: " + value);
+		this.contentDocument = doc; // <-- Strange, unless this is applied Mozilla 1.3 breaks
+
+		if (tinyMCE.execCommandCallback(this, 'execcommand_callback', 'execCommand', this.editorId, this.getBody(), command, user_interface, value))
+			return;
+
+		// Fix align on images
+		if (focusElm && focusElm.nodeName == "IMG") {
+			var align = focusElm.getAttribute('align');
+			var img = command == "JustifyCenter" ? focusElm.cloneNode(false) : focusElm;
+
+			switch (command) {
+				case "JustifyLeft":
+					if (align == 'left')
+						img.removeAttribute('align');
+					else
+						img.setAttribute('align', 'left');
+
+					// Remove the div
+					var div = focusElm.parentNode;
+					if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
+						div.parentNode.replaceChild(img, div);
+
+					this.selection.selectNode(img);
+					this.repaint();
+					tinyMCE.triggerNodeChange();
+					return;
+
+				case "JustifyCenter":
+					img.removeAttribute('align');
+
+					// Is centered
+					var div = tinyMCE.getParentElement(focusElm, "div");
+					if (div && div.style.textAlign == "center") {
+						// Remove div
+						if (div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
+							div.parentNode.replaceChild(img, div);
+					} else {
+						// Add div
+						var div = this.getDoc().createElement("div");
+						div.style.textAlign = 'center';
+						div.appendChild(img);
+						focusElm.parentNode.replaceChild(div, focusElm);
+					}
+
+					this.selection.selectNode(img);
+					this.repaint();
+					tinyMCE.triggerNodeChange();
+					return;
+
+				case "JustifyRight":
+					if (align == 'right')
+						img.removeAttribute('align');
+					else
+						img.setAttribute('align', 'right');
+
+					// Remove the div
+					var div = focusElm.parentNode;
+					if (div && div.nodeName == "DIV" && div.childNodes.length == 1 && div.parentNode)
+						div.parentNode.replaceChild(img, div);
+
+					this.selection.selectNode(img);
+					this.repaint();
+					tinyMCE.triggerNodeChange();
+					return;
+			}
+		}
+
+		if (tinyMCE.settings['force_br_newlines']) {
+			var alignValue = "";
+
+			if (doc.selection.type != "Control") {
+				switch (command) {
+						case "JustifyLeft":
+							alignValue = "left";
+							break;
+
+						case "JustifyCenter":
+							alignValue = "center";
+							break;
+
+						case "JustifyFull":
+							alignValue = "justify";
+							break;
+
+						case "JustifyRight":
+							alignValue = "right";
+							break;
+				}
+
+				if (alignValue != "") {
+					var rng = doc.selection.createRange();
+
+					if ((divElm = tinyMCE.getParentElement(rng.parentElement(), "div")) != null)
+						divElm.setAttribute("align", alignValue);
+					else if (rng.pasteHTML && rng.htmlText.length > 0)
+						rng.pasteHTML('<div align="' + alignValue + '">' + rng.htmlText + "</div>");
+
+					tinyMCE.triggerNodeChange();
+					return;
+				}
+			}
+		}
+
+		switch (command) {
+			case "mceRepaint":
+				this.repaint();
+				return true;
+
+			case "InsertUnorderedList":
+			case "InsertOrderedList":
+				var tag = (command == "InsertUnorderedList") ? "ul" : "ol";
+
+				if (tinyMCE.isSafari)
+					this.execCommand("mceInsertContent", false, "<" + tag + "><li>&nbsp;</li><" + tag + ">");
+				else
+					this.getDoc().execCommand(command, user_interface, value);
+
+				tinyMCE.triggerNodeChange();
+				break;
+
+			case "Strikethrough":
+				if (tinyMCE.isSafari)
+					this.execCommand("mceInsertContent", false, "<strike>" + this.selection.getSelectedHTML() + "</strike>");
+				else
+					this.getDoc().execCommand(command, user_interface, value);
+
+				tinyMCE.triggerNodeChange();
+				break;
+
+			case "mceSelectNode":
+				this.selection.selectNode(value);
+				tinyMCE.triggerNodeChange();
+				tinyMCE.selectedNode = value;
+				break;
+
+			case "FormatBlock":
+				if (value == null || value == "") {
+					var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address,blockquote,dt,dl,dd,samp");
+
+					if (elm)
+						this.execCommand("mceRemoveNode", false, elm);
+				} else {
+					if (tinyMCE.isGecko && new RegExp('<(div|blockquote|code|dt|dd|dl|samp)>', 'gi').test(value))
+						value = value.replace(/[^a-z]/gi, '');
+
+					if (tinyMCE.isMSIE && new RegExp('blockquote|code|samp', 'gi').test(value)) {
+						var b = this.selection.getBookmark();
+						this.getDoc().execCommand("FormatBlock", false, '<p>');
+						tinyMCE.renameElement(tinyMCE.getParentBlockElement(this.getFocusElement()), value);
+						this.selection.moveToBookmark(b);
+					} else
+						this.getDoc().execCommand("FormatBlock", false, value);
+				}
+
+				tinyMCE.triggerNodeChange();
+
+				break;
+
+			case "mceRemoveNode":
+				if (!value)
+					value = tinyMCE.getParentElement(this.getFocusElement());
+
+				if (tinyMCE.isMSIE) {
+					value.outerHTML = value.innerHTML;
+				} else {
+					var rng = value.ownerDocument.createRange();
+					rng.setStartBefore(value);
+					rng.setEndAfter(value);
+					rng.deleteContents();
+					rng.insertNode(rng.createContextualFragment(value.innerHTML));
+				}
+
+				tinyMCE.triggerNodeChange();
+
+				break;
+
+			case "mceSelectNodeDepth":
+				var parentNode = this.getFocusElement();
+				for (var i=0; parentNode; i++) {
+					if (parentNode.nodeName.toLowerCase() == "body")
+						break;
+
+					if (parentNode.nodeName.toLowerCase() == "#text") {
+						i--;
+						parentNode = parentNode.parentNode;
+						continue;
+					}
+
+					if (i == value) {
+						this.selection.selectNode(parentNode, false);
+						tinyMCE.triggerNodeChange();
+						tinyMCE.selectedNode = parentNode;
+						return;
+					}
+
+					parentNode = parentNode.parentNode;
+				}
+
+				break;
+
+			case "SetStyleInfo":
+				var rng = this.getRng();
+				var sel = this.getSel();
+				var scmd = value['command'];
+				var sname = value['name'];
+				var svalue = value['value'] == null ? '' : value['value'];
+				//var svalue = value['value'] == null ? '' : value['value'];
+				var wrapper = value['wrapper'] ? value['wrapper'] : "span";
+				var parentElm = null;
+				var invalidRe = new RegExp("^BODY|HTML$", "g");
+				var invalidParentsRe = tinyMCE.settings['merge_styles_invalid_parents'] != '' ? new RegExp(tinyMCE.settings['merge_styles_invalid_parents'], "gi") : null;
+
+				// Whole element selected check
+				if (tinyMCE.isMSIE) {
+					// Control range
+					if (rng.item)
+						parentElm = rng.item(0);
+					else {
+						var pelm = rng.parentElement();
+						var prng = doc.selection.createRange();
+						prng.moveToElementText(pelm);
+
+						if (rng.htmlText == prng.htmlText || rng.boundingWidth == 0) {
+							if (invalidParentsRe == null || !invalidParentsRe.test(pelm.nodeName))
+								parentElm = pelm;
+						}
+					}
+				} else {
+					var felm = this.getFocusElement();
+					if (sel.isCollapsed || (new RegExp('td|tr|tbody|table', 'gi').test(felm.nodeName) && sel.anchorNode == felm.parentNode))
+						parentElm = felm;
+				}
+
+				// Whole element selected
+				if (parentElm && !invalidRe.test(parentElm.nodeName)) {
+					if (scmd == "setstyle")
+						tinyMCE.setStyleAttrib(parentElm, sname, svalue);
+
+					if (scmd == "setattrib")
+						tinyMCE.setAttrib(parentElm, sname, svalue);
+
+					if (scmd == "removeformat") {
+						parentElm.style.cssText = '';
+						tinyMCE.setAttrib(parentElm, 'class', '');
+					}
+
+					// Remove style/attribs from all children
+					var ch = tinyMCE.getNodeTree(parentElm, new Array(), 1);
+					for (var z=0; z<ch.length; z++) {
+						if (ch[z] == parentElm)
+							continue;
+
+						if (scmd == "setstyle")
+							tinyMCE.setStyleAttrib(ch[z], sname, '');
+
+						if (scmd == "setattrib")
+							tinyMCE.setAttrib(ch[z], sname, '');
+
+						if (scmd == "removeformat") {
+							ch[z].style.cssText = '';
+							tinyMCE.setAttrib(ch[z], 'class', '');
+						}
+					}
+				} else {
+					this._setUseCSS(false); // Bug in FF when running in fullscreen
+					doc.execCommand("FontName", false, "#mce_temp_font#");
+					var elementArray = tinyMCE.getElementsByAttributeValue(this.getBody(), "font", "face", "#mce_temp_font#");
+
+					// Change them all
+					for (var x=0; x<elementArray.length; x++) {
+						elm = elementArray[x];
+						if (elm) {
+							var spanElm = doc.createElement(wrapper);
+
+							if (scmd == "setstyle")
+								tinyMCE.setStyleAttrib(spanElm, sname, svalue);
+
+							if (scmd == "setattrib")
+								tinyMCE.setAttrib(spanElm, sname, svalue);
+
+							if (scmd == "removeformat") {
+								spanElm.style.cssText = '';
+								tinyMCE.setAttrib(spanElm, 'class', '');
+							}
+
+							if (elm.hasChildNodes()) {
+								for (var i=0; i<elm.childNodes.length; i++)
+									spanElm.appendChild(elm.childNodes[i].cloneNode(true));
+							}
+
+							spanElm.setAttribute("mce_new", "true");
+							elm.parentNode.replaceChild(spanElm, elm);
+
+							// Remove style/attribs from all children
+							var ch = tinyMCE.getNodeTree(spanElm, new Array(), 1);
+							for (var z=0; z<ch.length; z++) {
+								if (ch[z] == spanElm)
+									continue;
+
+								if (scmd == "setstyle")
+									tinyMCE.setStyleAttrib(ch[z], sname, '');
+
+								if (scmd == "setattrib")
+									tinyMCE.setAttrib(ch[z], sname, '');
+
+								if (scmd == "removeformat") {
+									ch[z].style.cssText = '';
+									tinyMCE.setAttrib(ch[z], 'class', '');
+								}
+							}
+						}
+					}
+				}
+
+				// Cleaup wrappers
+				var nodes = doc.getElementsByTagName(wrapper);
+				for (var i=nodes.length-1; i>=0; i--) {
+					var elm = nodes[i];
+					var isNew = tinyMCE.getAttrib(elm, "mce_new") == "true";
+
+					elm.removeAttribute("mce_new");
+
+					// Is only child a element
+					if (elm.childNodes && elm.childNodes.length == 1 && elm.childNodes[0].nodeType == 1) {
+						//tinyMCE.debug("merge1" + isNew);
+						this._mergeElements(scmd, elm, elm.childNodes[0], isNew);
+						continue;
+					}
+
+					// Is I the only child
+					if (elm.parentNode.childNodes.length == 1 && !invalidRe.test(elm.nodeName) && !invalidRe.test(elm.parentNode.nodeName)) {
+						//tinyMCE.debug("merge2" + isNew + "," + elm.nodeName + "," + elm.parentNode.nodeName);
+						if (invalidParentsRe == null || !invalidParentsRe.test(elm.parentNode.nodeName))
+							this._mergeElements(scmd, elm.parentNode, elm, false);
+					}
+				}
+
+				// Remove empty wrappers
+				var nodes = doc.getElementsByTagName(wrapper);
+				for (var i=nodes.length-1; i>=0; i--) {
+					var elm = nodes[i];
+					var isEmpty = true;
+
+					// Check if it has any attribs
+					var tmp = doc.createElement("body");
+					tmp.appendChild(elm.cloneNode(false));
+
+					// Is empty span, remove it
+					tmp.innerHTML = tmp.innerHTML.replace(new RegExp('style=""|class=""', 'gi'), '');
+					//tinyMCE.debug(tmp.innerHTML);
+					if (new RegExp('<span>', 'gi').test(tmp.innerHTML)) {
+						for (var x=0; x<elm.childNodes.length; x++) {
+							if (elm.parentNode != null)
+								elm.parentNode.insertBefore(elm.childNodes[x].cloneNode(true), elm);
+						}
+
+						elm.parentNode.removeChild(elm);
+					}
+				}
+
+				// Re add the visual aids
+				if (scmd == "removeformat")
+					tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+
+				tinyMCE.triggerNodeChange();
+
+				break;
+
+			case "FontName":
+				if (value == null) {
+					var s = this.getSel();
+
+					// Find font and select it
+					if (tinyMCE.isGecko && s.isCollapsed) {
+						var f = tinyMCE.getParentElement(this.getFocusElement(), "font");
+
+						if (f != null)
+							this.selection.selectNode(f, false);
+					}
+
+					// Remove format
+					this.getDoc().execCommand("RemoveFormat", false, null);
+
+					// Collapse range if font was found
+					if (f != null && tinyMCE.isGecko) {
+						var r = this.getRng().cloneRange();
+						r.collapse(true);
+						s.removeAllRanges();
+						s.addRange(r);
+					}
+				} else
+					this.getDoc().execCommand('FontName', false, value);
+
+				if (tinyMCE.isGecko)
+					window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+
+				return;
+
+			case "FontSize":
+				this.getDoc().execCommand('FontSize', false, value);
+
+				if (tinyMCE.isGecko)
+					window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+
+				return;
+
+			case "forecolor":
+				this.getDoc().execCommand('forecolor', false, value);
+				break;
+
+			case "HiliteColor":
+				if (tinyMCE.isGecko) {
+					this._setUseCSS(true);
+					this.getDoc().execCommand('hilitecolor', false, value);
+					this._setUseCSS(false);
+				} else
+					this.getDoc().execCommand('BackColor', false, value);
+				break;
+
+			case "Cut":
+			case "Copy":
+			case "Paste":
+				var cmdFailed = false;
+
+				// Try executing command
+				eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');
+
+				if (tinyMCE.isOpera && cmdFailed)
+					alert('Currently not supported by your browser, use keyboard shortcuts instead.');
+
+				// Alert error in gecko if command failed
+				if (tinyMCE.isGecko && cmdFailed) {
+					// Confirm more info
+					if (confirm(tinyMCE.entityDecode(tinyMCE.getLang('lang_clipboard_msg'))))
+						window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal');
+
+					return;
+				} else
+					tinyMCE.triggerNodeChange();
+			break;
+
+			case "mceSetContent":
+				if (!value)
+					value = "";
+
+				// Call custom cleanup code
+				value = tinyMCE.storeAwayURLs(value);
+				value = tinyMCE._customCleanup(this, "insert_to_editor", value);
+				tinyMCE._setHTML(doc, value);
+				tinyMCE.setInnerHTML(doc.body, tinyMCE._cleanupHTML(this, doc, tinyMCE.settings, doc.body));
+				tinyMCE.convertAllRelativeURLs(doc.body);
+
+				// Cleanup any mess left from storyAwayURLs
+				tinyMCE._removeInternal(this.getBody());
+
+				// When editing always use fonts internaly
+				if (tinyMCE.getParam("convert_fonts_to_spans"))
+					tinyMCE.convertSpansToFonts(doc);
+
+				tinyMCE.handleVisualAid(doc.body, true, this.visualAid, this);
+				tinyMCE._setEventsEnabled(doc.body, false);
+				return true;
+
+			case "mceCleanup":
+				var b = this.selection.getBookmark();
+				tinyMCE._setHTML(this.contentDocument, this.getBody().innerHTML);
+				tinyMCE.setInnerHTML(this.getBody(), tinyMCE._cleanupHTML(this, this.contentDocument, this.settings, this.getBody(), this.visualAid));
+				tinyMCE.convertAllRelativeURLs(doc.body);
+
+				// When editing always use fonts internaly
+				if (tinyMCE.getParam("convert_fonts_to_spans"))
+					tinyMCE.convertSpansToFonts(doc);
+
+				tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+				tinyMCE._setEventsEnabled(this.getBody(), false);
+				this.repaint();
+				this.selection.moveToBookmark(b);
+				tinyMCE.triggerNodeChange();
+			break;
+
+			case "mceReplaceContent":
+				// Force empty string
+				if (!value)
+					value = '';
+
+				this.getWin().focus();
+
+				var selectedText = "";
+
+				if (tinyMCE.isMSIE) {
+					var rng = doc.selection.createRange();
+					selectedText = rng.text;
+				} else
+					selectedText = this.getSel().toString();
+
+				if (selectedText.length > 0) {
+					value = tinyMCE.replaceVar(value, "selection", selectedText);
+					tinyMCE.execCommand('mceInsertContent', false, value);
+				}
+
+				tinyMCE.triggerNodeChange();
+			break;
+
+			case "mceSetAttribute":
+				if (typeof(value) == 'object') {
+					var targetElms = (typeof(value['targets']) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value['targets'];
+					var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms);
+
+					if (targetNode) {
+						targetNode.setAttribute(value['name'], value['value']);
+						tinyMCE.triggerNodeChange();
+					}
+				}
+			break;
+
+			case "mceSetCSSClass":
+				this.execCommand("SetStyleInfo", false, {command : "setattrib", name : "class", value : value});
+			break;
+
+			case "mceInsertRawHTML":
+				var key = 'tiny_mce_marker';
+
+				this.execCommand('mceBeginUndoLevel');
+
+				// Insert marker key
+				this.execCommand('mceInsertContent', false, key);
+
+				// Store away scroll pos
+				var scrollX = this.getDoc().body.scrollLeft + this.getDoc().documentElement.scrollLeft;
+				var scrollY = this.getDoc().body.scrollTop + this.getDoc().documentElement.scrollTop;
+
+				// Find marker and replace with RAW HTML
+				var html = this.getBody().innerHTML;
+				if ((pos = html.indexOf(key)) != -1)
+					tinyMCE.setInnerHTML(this.getBody(), html.substring(0, pos) + value + html.substring(pos + key.length));
+
+				// Restore scoll pos
+				this.contentWindow.scrollTo(scrollX, scrollY);
+
+				this.execCommand('mceEndUndoLevel');
+
+				break;
+
+			case "mceInsertContent":
+				// Force empty string
+				if (!value)
+					value = '';
+
+				var insertHTMLFailed = false;
+				this.getWin().focus();
+
+				if (tinyMCE.isGecko || tinyMCE.isOpera) {
+					try {
+						// Is plain text or HTML, &amp;, &nbsp; etc will be encoded wrong in FF
+						if (value.indexOf('<') == -1 && !value.match(/(&#38;|&#160;|&#60;|&#62;)/g)) {
+							var r = this.getRng();
+							var n = this.getDoc().createTextNode(tinyMCE.entityDecode(value));
+							var s = this.getSel();
+							var r2 = r.cloneRange();
+
+							// Insert text at cursor position
+							s.removeAllRanges();
+							r.deleteContents();
+							r.insertNode(n);
+
+							// Move the cursor to the end of text
+							r2.selectNode(n);
+							r2.collapse(false);
+							s.removeAllRanges();
+							s.addRange(r2);
+						} else {
+							value = tinyMCE.fixGeckoBaseHREFBug(1, this.getDoc(), value);
+							this.getDoc().execCommand('inserthtml', false, value);
+							tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);
+						}
+					} catch (ex) {
+						insertHTMLFailed = true;
+					}
+
+					if (!insertHTMLFailed) {
+						tinyMCE.triggerNodeChange();
+						return;
+					}
+				}
+
+				// Ugly hack in Opera due to non working "inserthtml"
+				if (tinyMCE.isOpera && insertHTMLFailed) {
+					this.getDoc().execCommand("insertimage", false, tinyMCE.uniqueURL);
+					var ar = tinyMCE.getElementsByAttributeValue(this.getBody(), "img", "src", tinyMCE.uniqueURL);
+					ar[0].outerHTML = value;
+					return;
+				}
+
+				if (!tinyMCE.isMSIE) {
+					var isHTML = value.indexOf('<') != -1;
+					var sel = this.getSel();
+					var rng = this.getRng();
+
+					if (isHTML) {
+						if (tinyMCE.isSafari) {
+							var tmpRng = this.getDoc().createRange();
+
+							tmpRng.setStart(this.getBody(), 0);
+							tmpRng.setEnd(this.getBody(), 0);
+
+							value = tmpRng.createContextualFragment(value);
+						} else
+							value = rng.createContextualFragment(value);
+					} else {
+						// Setup text node
+						var el = document.createElement("div");
+						el.innerHTML = value;
+						value = el.firstChild.nodeValue;
+						value = doc.createTextNode(value);
+					}
+
+					// Insert plain text in Safari
+					if (tinyMCE.isSafari && !isHTML) {
+						this.execCommand('InsertText', false, value.nodeValue);
+						tinyMCE.triggerNodeChange();
+						return true;
+					} else if (tinyMCE.isSafari && isHTML) {
+						rng.deleteContents();
+						rng.insertNode(value);
+						tinyMCE.triggerNodeChange();
+						return true;
+					}
+
+					rng.deleteContents();
+
+					// If target node is text do special treatment, (Mozilla 1.3 fix)
+					if (rng.startContainer.nodeType == 3) {
+						var node = rng.startContainer.splitText(rng.startOffset);
+						node.parentNode.insertBefore(value, node); 
+					} else
+						rng.insertNode(value);
+
+					if (!isHTML) {
+						// Removes weird selection trails
+						sel.selectAllChildren(doc.body);
+						sel.removeAllRanges();
+
+						// Move cursor to end of content
+						var rng = doc.createRange();
+
+						rng.selectNode(value);
+						rng.collapse(false);
+
+						sel.addRange(rng);
+					} else
+						rng.collapse(false);
+
+					tinyMCE.fixGeckoBaseHREFBug(2, this.getDoc(), value);
+				} else {
+					var rng = doc.selection.createRange();
+					var c = value.indexOf('<!--') != -1;
+
+					// Fix comment bug, add tag before comments
+					if (c)
+						value = tinyMCE.uniqueTag + value;
+
+					if (rng.item)
+						rng.item(0).outerHTML = value;
+					else
+						rng.pasteHTML(value);
+
+					// Remove unique tag
+					if (c) {
+						var e = this.getDoc().getElementById('mceTMPElement');
+						e.parentNode.removeChild(e);
+					}
+				}
+
+				tinyMCE.triggerNodeChange();
+			break;
+
+			case "mceStartTyping":
+				if (tinyMCE.settings['custom_undo_redo'] && this.undoRedo.typingUndoIndex == -1) {
+					this.undoRedo.typingUndoIndex = this.undoRedo.undoIndex;
+					this.execCommand('mceAddUndoLevel');
+					//tinyMCE.debug("mceStartTyping");
+				}
+				break;
+
+			case "mceEndTyping":
+				if (tinyMCE.settings['custom_undo_redo'] && this.undoRedo.typingUndoIndex != -1) {
+					this.execCommand('mceAddUndoLevel');
+					this.undoRedo.typingUndoIndex = -1;
+					//tinyMCE.debug("mceEndTyping");
+				}
+				break;
+
+			case "mceBeginUndoLevel":
+				this.undoRedoLevel = false;
+				break;
+
+			case "mceEndUndoLevel":
+				this.undoRedoLevel = true;
+				this.execCommand('mceAddUndoLevel');
+				break;
+
+			case "mceAddUndoLevel":
+				if (tinyMCE.settings['custom_undo_redo'] && this.undoRedoLevel) {
+					if (this.undoRedo.add())
+						tinyMCE.triggerNodeChange(false);
+				}
+				break;
+
+			case "Undo":
+				if (tinyMCE.settings['custom_undo_redo']) {
+					tinyMCE.execCommand("mceEndTyping");
+					this.undoRedo.undo();
+					tinyMCE.triggerNodeChange();
+				} else
+					this.getDoc().execCommand(command, user_interface, value);
+				break;
+
+			case "Redo":
+				if (tinyMCE.settings['custom_undo_redo']) {
+					tinyMCE.execCommand("mceEndTyping");
+					this.undoRedo.redo();
+					tinyMCE.triggerNodeChange();
+				} else
+					this.getDoc().execCommand(command, user_interface, value);
+				break;
+
+			case "mceToggleVisualAid":
+				this.visualAid = !this.visualAid;
+				tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid, this);
+				tinyMCE.triggerNodeChange();
+				break;
+
+			case "Indent":
+				this.getDoc().execCommand(command, user_interface, value);
+				tinyMCE.triggerNodeChange();
+				if (tinyMCE.isMSIE) {
+					var n = tinyMCE.getParentElement(this.getFocusElement(), "blockquote");
+					do {
+						if (n && n.nodeName == "BLOCKQUOTE") {
+							n.removeAttribute("dir");
+							n.removeAttribute("style");
+						}
+					} while (n != null && (n = n.parentNode) != null);
+				}
+				break;
+
+			case "removeformat":
+				var text = this.selection.getSelectedText();
+
+				if (tinyMCE.isOpera) {
+					this.getDoc().execCommand("RemoveFormat", false, null);
+					return;
+				}
+
+				if (tinyMCE.isMSIE) {
+					try {
+						var rng = doc.selection.createRange();
+						rng.execCommand("RemoveFormat", false, null);
+					} catch (e) {
+						// Do nothing
+					}
+
+					this.execCommand("SetStyleInfo", false, {command : "removeformat"});
+				} else {
+					this.getDoc().execCommand(command, user_interface, value);
+
+					this.execCommand("SetStyleInfo", false, {command : "removeformat"});
+				}
+
+				// Remove class
+				if (text.length == 0)
+					this.execCommand("mceSetCSSClass", false, "");
+
+				tinyMCE.triggerNodeChange();
+				break;
+
+			default:
+				this.getDoc().execCommand(command, user_interface, value);
+
+				if (tinyMCE.isGecko)
+					window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+				else
+					tinyMCE.triggerNodeChange();
+		}
+
+		// Add undo level after modification
+		if (command != "mceAddUndoLevel" && command != "Undo" && command != "Redo" && command != "mceStartTyping" && command != "mceEndTyping")
+			tinyMCE.execCommand("mceAddUndoLevel");
+	},
+
+	/**
+	 * Returns a command specific value, for example the current font size.
+	 *
+	 * @param {string} c Command to query value from.
+	 * @return Command specific value, for example the current font size.
+	 * @type mixed
+	 */
+	queryCommandValue : function(c) {
+		try {
+			return this.getDoc().queryCommandValue(c);
+		} catch (e) {
+			return null;
+		}
+	},
+
+	/**
+	 * Returns a command specific state, for example if bold is enabled or not.
+	 *
+	 * @param {string} c Command to query state from.
+	 * @return Command specific state, for example if bold is enabled or not.
+	 * @type boolean
+	 */
+	queryCommandState : function(c) {
+		return this.getDoc().queryCommandState(c);
+	},
+
+	/**
+	 * Gets executed when the editor control instance is added.
+	 *
+	 * @param {HTMLElement} replace_element Element to replace with a editor instance.
+	 * @param {string} form_element_name Form element name that gets replaced.
+	 * @param {DOMDocument} target_document Target document reference where the element is located.
+	 * @private
+	 */
+	_onAdd : function(replace_element, form_element_name, target_document) {
+		var hc, th, to, editorTemplate;
+
+		th = this.settings['theme'];
+		to = tinyMCE.themes[th];
+
+		var targetDoc = target_document ? target_document : document;
+
+		this.targetDoc = targetDoc;
+
+		tinyMCE.themeURL = tinyMCE.baseURL + "/themes/" + this.settings['theme'];
+		this.settings['themeurl'] = tinyMCE.themeURL;
+
+		if (!replace_element) {
+			alert("Error: Could not find the target element.");
+			return false;
+		}
+
+		if (to.getEditorTemplate)
+			editorTemplate = to.getEditorTemplate(this.settings, this.editorId);
+
+		var deltaWidth = editorTemplate['delta_width'] ? editorTemplate['delta_width'] : 0;
+		var deltaHeight = editorTemplate['delta_height'] ? editorTemplate['delta_height'] : 0;
+		var html = '<span id="' + this.editorId + '_parent" class="mceEditorContainer">' + editorTemplate['html'];
+
+		html = tinyMCE.replaceVar(html, "editor_id", this.editorId);
+		this.settings['default_document'] = tinyMCE.baseURL + "/blank.htm";
+
+		this.settings['old_width'] = this.settings['width'];
+		this.settings['old_height'] = this.settings['height'];
+
+		// Set default width, height
+		if (this.settings['width'] == -1)
+			this.settings['width'] = replace_element.offsetWidth;
+
+		if (this.settings['height'] == -1)
+			this.settings['height'] = replace_element.offsetHeight;
+
+		// Try the style width
+		if (this.settings['width'] == 0)
+			this.settings['width'] = replace_element.style.width;
+
+		// Try the style height
+		if (this.settings['height'] == 0)
+			this.settings['height'] = replace_element.style.height; 
+
+		// If no width/height then default to 320x240, better than nothing
+		if (this.settings['width'] == 0)
+			this.settings['width'] = 320;
+
+		if (this.settings['height'] == 0)
+			this.settings['height'] = 240;
+
+		this.settings['area_width'] = parseInt(this.settings['width']);
+		this.settings['area_height'] = parseInt(this.settings['height']);
+		this.settings['area_width'] += deltaWidth;
+		this.settings['area_height'] += deltaHeight;
+
+		// Special % handling
+		if (("" + this.settings['width']).indexOf('%') != -1)
+			this.settings['area_width'] = "100%";
+
+		if (("" + this.settings['height']).indexOf('%') != -1)
+			this.settings['area_height'] = "100%";
+
+		if (("" + replace_element.style.width).indexOf('%') != -1) {
+			this.settings['width'] = replace_element.style.width;
+			this.settings['area_width'] = "100%";
+		}
+
+		if (("" + replace_element.style.height).indexOf('%') != -1) {
+			this.settings['height'] = replace_element.style.height;
+			this.settings['area_height'] = "100%";
+		}
+
+		html = tinyMCE.applyTemplate(html);
+
+		this.settings['width'] = this.settings['old_width'];
+		this.settings['height'] = this.settings['old_height'];
+
+		this.visualAid = this.settings['visual'];
+		this.formTargetElementId = form_element_name;
+
+		// Get replace_element contents
+		if (replace_element.nodeName == "TEXTAREA" || replace_element.nodeName == "INPUT")
+			this.startContent = replace_element.value;
+		else
+			this.startContent = replace_element.innerHTML;
+
+		// If not text area or input
+		if (replace_element.nodeName != "TEXTAREA" && replace_element.nodeName != "INPUT") {
+			this.oldTargetElement = replace_element;
+
+			// Debug mode
+			if (tinyMCE.settings['debug']) {
+				hc = '<textarea wrap="off" id="' + form_element_name + '" name="' + form_element_name + '" cols="100" rows="15"></textarea>';
+			} else {
+				hc = '<input type="hidden" type="text" id="' + form_element_name + '" name="' + form_element_name + '" />';
+				this.oldTargetElement.style.display = "none";
+			}
+
+			html += '</span>';
+
+			if (tinyMCE.isGecko)
+				html = hc + html;
+			else
+				html += hc;
+
+			// Output HTML and set editable
+			if (tinyMCE.isGecko) {
+				var rng = replace_element.ownerDocument.createRange();
+				rng.setStartBefore(replace_element);
+
+				var fragment = rng.createContextualFragment(html);
+				tinyMCE.insertAfter(fragment, replace_element);
+			} else
+				replace_element.insertAdjacentHTML("beforeBegin", html);
+		} else {
+			html += '</span>';
+
+			// Just hide the textarea element
+			this.oldTargetElement = replace_element;
+
+			if (!tinyMCE.settings['debug'])
+				this.oldTargetElement.style.display = "none";
+
+			// Output HTML and set editable
+			if (tinyMCE.isGecko) {
+				var rng = replace_element.ownerDocument.createRange();
+				rng.setStartBefore(replace_element);
+
+				var fragment = rng.createContextualFragment(html);
+				tinyMCE.insertAfter(fragment, replace_element);
+			} else
+				replace_element.insertAdjacentHTML("beforeBegin", html);
+		}
+
+		// Setup iframe
+		var dynamicIFrame = false;
+		var tElm = targetDoc.getElementById(this.editorId);
+
+		if (!tinyMCE.isMSIE) {
+			if (tElm && tElm.nodeName == "SPAN") {
+				tElm = tinyMCE._createIFrame(tElm, targetDoc);
+				dynamicIFrame = true;
+			}
+
+			this.targetElement = tElm;
+			this.iframeElement = tElm;
+			this.contentDocument = tElm.contentDocument;
+			this.contentWindow = tElm.contentWindow;
+
+			//this.getDoc().designMode = "on";
+		} else {
+			if (tElm && tElm.nodeName == "SPAN")
+				tElm = tinyMCE._createIFrame(tElm, targetDoc, targetDoc.parentWindow);
+			else
+				tElm = targetDoc.frames[this.editorId];
+
+			this.targetElement = tElm;
+			this.iframeElement = targetDoc.getElementById(this.editorId);
+
+			if (tinyMCE.isOpera) {
+				this.contentDocument = this.iframeElement.contentDocument;
+				this.contentWindow = this.iframeElement.contentWindow;
+				dynamicIFrame = true;
+			} else {
+				this.contentDocument = tElm.window.document;
+				this.contentWindow = tElm.window;
+			}
+
+			this.getDoc().designMode = "on";
+		}
+
+		// Setup base HTML
+		var doc = this.contentDocument;
+		if (dynamicIFrame) {
+			var html = tinyMCE.getParam('doctype') + '<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="' + tinyMCE.settings['base_href'] + '" /><title>blank_page</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body class="mceContentBody"></body></html>';
+
+			try {
+				if (!this.isHidden())
+					this.getDoc().designMode = "on";
+
+				doc.open();
+				doc.write(html);
+				doc.close();
+			} catch (e) {
+				// Failed Mozilla 1.3
+				this.getDoc().location.href = tinyMCE.baseURL + "/blank.htm";
+			}
+		}
+
+		// This timeout is needed in MSIE 5.5 for some odd reason
+		// it seems that the document.frames isn't initialized yet?
+		if (tinyMCE.isMSIE)
+			window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\"" + this.editorId + "\"]);", 1);
+
+		tinyMCE.setupContent(this.editorId, true);
+
+		return true;
+	},
+
+	/**
+	 * Sets the base href url of the current document instance. This method is used
+	 * to temporarly remove the base url during copy/paste and drag/drop operations
+	 * of relative links from external sites into TinyMCE. MSIE has a bug and converts
+	 * relative links from external sites to absolute links incorrectly.
+	 *
+	 * @param {string} u URL to set as base URL or null to remove it.
+	 */
+	setBaseHREF : function(u) {
+		var h, b, d, nl;
+
+		d = this.getDoc();
+		nl = d.getElementsByTagName("base");
+		b = nl.length > 0 ? nl[0] : null;
+
+		if (!b) {
+			nl = d.getElementsByTagName("head");
+			h = nl.length > 0 ? nl[0] : null;
+
+			b = d.createElement("base");
+			b.setAttribute('href', u);
+			h.appendChild(b);
+		} else {
+			if (u == "" || u == null)
+				b.parentNode.removeChild(b);
+			else
+				b.setAttribute('href', u);
+		}
+	},
+
+	/**
+	 * Returns the currently selected element. This is was added for compatiblity and is deprecated.
+	 * Please use inst.selection.getFocusElement instead.
+	 *
+	 * @return Currently selected element.
+	 * @type HTMLElement
+	 * @deprecated
+	 */
+	getFocusElement : function() {
+		return this.selection.getFocusElement();
+	},
+
+	/**
+	 * Returns the browsers selection instance. This is was added for compatiblity and is deprecated.
+	 * Please use inst.selection.getSel instead.
+	 *
+	 * @return Browser selection instance.
+	 * @type DOMSelection
+	 * @deprecated
+	 */
+	getSel : function() {
+		return this.selection.getSel();
+	},
+
+	/**
+	 * Returns the browsers selections first range instance. This is was added for compatiblity and is deprecated.
+	 * Please use inst.selection.getRng instead.
+	 *
+	 * @return Browsers selections first range instance.
+	 * @type DOMRange
+	 * @deprecated
+	 */
+	getRng : function() {
+		return this.selection.getRng();
+	},
+
+	/**
+	 * Moves the contents from the TinyMCE editor control instance to the hidden textarea
+	 * that got replaced with TinyMCE. This is executed automaticly on for example form submit unless you configure otherwice.
+	 *
+	 * @param {boolean} skip_cleanup Optional Skip cleanup, simply move the contents as fast as possible.
+	 * @param {boolean} skip_callback Optional Skip callback, don't call the save_callback function.
+	 */
+	triggerSave : function(skip_cleanup, skip_callback) {
+		this.switchSettings();
+
+		tinyMCE.settings['preformatted'] = false;
+
+		// Default to false
+		if (typeof(skip_cleanup) == "undefined")
+			skip_cleanup = false;
+
+		// Default to false
+		if (typeof(skip_callback) == "undefined")
+			skip_callback = false;
+
+		tinyMCE._setHTML(this.getDoc(), this.getBody().innerHTML);
+
+		// Remove visual aids when cleanup is disabled
+		if (this.settings['cleanup'] == false) {
+			tinyMCE.handleVisualAid(this.getBody(), true, false, this);
+			tinyMCE._setEventsEnabled(this.getBody(), true);
+		}
+
+		tinyMCE._customCleanup(this, "submit_content_dom", this.contentWindow.document.body);
+		var htm = skip_cleanup ? this.getBody().innerHTML : tinyMCE._cleanupHTML(this, this.getDoc(), this.settings, this.getBody(), tinyMCE.visualAid, true, true);
+		htm = tinyMCE._customCleanup(this, "submit_content", htm);
+
+		if (!skip_callback && tinyMCE.settings['save_callback'] != "")
+			var content = eval(tinyMCE.settings['save_callback'] + "(this.formTargetElementId,htm,this.getBody());");
+
+		// Use callback content if available
+		if ((typeof(content) != "undefined") && content != null)
+			htm = content;
+
+		// Replace some weird entities (Bug: #1056343)
+		htm = tinyMCE.regexpReplace(htm, "&#40;", "(", "gi");
+		htm = tinyMCE.regexpReplace(htm, "&#41;", ")", "gi");
+		htm = tinyMCE.regexpReplace(htm, "&#59;", ";", "gi");
+		htm = tinyMCE.regexpReplace(htm, "&#34;", "&quot;", "gi");
+		htm = tinyMCE.regexpReplace(htm, "&#94;", "^", "gi");
+
+		if (this.formElement)
+			this.formElement.value = htm;
+
+		if (tinyMCE.isSafari && this.formElement)
+			this.formElement.innerText = htm;
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_DOMUtils.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_DOMUtils.class.js.html new file mode 100644 index 000000000..759d94ee8 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_DOMUtils.class.js.html @@ -0,0 +1,707 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_DOMUtils.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_DOMUtils.class.js'

+ +

+ +
+ + + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_DOMUtils.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:29 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ *
+ * The contents of this file will be wrapped in a class later on.
+ */
+
+/**
+ * Returns a element by a specific attribute and it's value.
+ *
+ * @param {HTMLElement} n Element to search in.
+ * @param {string} e Element name to search for.
+ * @param {string} a Attribute name to search for.
+ * @param {string} v Attribute value to search for.
+ * @return HTML element that matched the criterias or null on failure.
+ * @type HTMLElement
+ */
+TinyMCE_Engine.prototype.getElementByAttributeValue = function(n, e, a, v) {
+	return (n = this.getElementsByAttributeValue(n, e, a, v)).length == 0 ? null : n[0];
+};
+
+/**
+ * Returns a element array by a specific attribute and it's value.
+ *
+ * @param {HTMLElement} n Element to search in.
+ * @param {string} e Element name to search for.
+ * @param {string} a Attribute name to search for.
+ * @param {string} v Attribute value to search for.
+ * @return HTML element array that matched the criterias or null on failure.
+ * @type Array
+ */
+TinyMCE_Engine.prototype.getElementsByAttributeValue = function(n, e, a, v) {
+	var i, nl = n.getElementsByTagName(e), o = new Array();
+
+	for (i=0; i<nl.length; i++) {
+		if (tinyMCE.getAttrib(nl[i], a).indexOf(v) != -1)
+			o[o.length] = nl[i];
+	}
+
+	return o;
+};
+
+/**
+ * Returns true/false if the specified node is a block element or not.
+ *
+ * @param {HTMLNode} n Node to verify.
+ * @return true/false if the specified node is a block element or not.
+ * @type boolean
+ */
+TinyMCE_Engine.prototype.isBlockElement = function(n) {
+	return n != null && n.nodeType == 1 && this.blockRegExp.test(n.nodeName);
+};
+
+/**
+ * Returns the first block element parent of the specified node.
+ *
+ * @param {HTMLNode} n Node get parent block element for.
+ * @return First block element parent of the specified node or null if it wasn't found.
+ * @type HTMLElement
+ */
+TinyMCE_Engine.prototype.getParentBlockElement = function(n) {
+	while (n) {
+		if (this.isBlockElement(n))
+			return n;
+
+		n = n.parentNode;
+	}
+
+	return null;
+};
+
+/**
+ * Inserts a node after the specific node.
+ *
+ * @param {HTMLNode} n New node to insert.
+ * @param {HTMLNode} r Reference node to insert after.
+ */
+TinyMCE_Engine.prototype.insertAfter = function(n, r){
+	if (r.nextSibling)
+		r.parentNode.insertBefore(n, r.nextSibling);
+	else
+		r.parentNode.appendChild(n);
+};
+
+/**
+ * Sets the innerHTML property of a element, this function also
+ * fixes a MSIE bug where the first comment is removed.
+ *
+ * @param {HTMLElement} e Element to insert HTML in.
+ * @param {string} h HTML code to insert into innerHTML.
+ */
+TinyMCE_Engine.prototype.setInnerHTML = function(e, h) {
+	var i, nl, n;
+
+	if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
+		// Since MSIE handles invalid HTML better that valid XHTML we
+		// need to make some things invalid. <hr /> gets converted to <hr>.
+		h = h.replace(/\s\/>/g, '>');
+
+		// Since MSIE auto generated emtpy P tags some times we must tell it to keep the real ones
+		h = h.replace(/<p([^>]*)>\u00A0?<\/p>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); // Keep empty paragraphs
+		h = h.replace(/<p([^>]*)>\s*&nbsp;\s*<\/p>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); // Keep empty paragraphs
+		h = h.replace(/<p([^>]*)>\s+<\/p>/gi, '<p$1 mce_keep="true">&nbsp;</p>'); // Keep empty paragraphs
+
+		// Remove first comment
+		e.innerHTML = tinyMCE.uniqueTag + h;
+		e.firstChild.removeNode(true);
+
+		// Remove weird auto generated empty paragraphs unless it's supposed to be there
+		nl = e.getElementsByTagName("p");
+		for (i=nl.length-1; i>=0; i--) {
+			n = nl[i];
+
+			if (n.nodeName == 'P' && !n.hasChildNodes() && !n.mce_keep)
+				n.parentNode.removeChild(n);
+		}
+	} else {
+		h = this.fixGeckoBaseHREFBug(1, e, h);
+		e.innerHTML = h;
+		this.fixGeckoBaseHREFBug(2, e, h);
+	}
+};
+
+/**
+ * Returns the outer HTML of a element, this uses the outerHTML
+ * property in MSIE and Opera and a workaround for Gecko.
+ *
+ * @param {HTMLElement} e HTML element to get outerHTML from.
+ * @return HTML content string.
+ * @type string
+ */
+TinyMCE_Engine.prototype.getOuterHTML = function(e) {
+	if (tinyMCE.isMSIE)
+		return e.outerHTML;
+
+	var d = e.ownerDocument.createElement("body");
+	d.appendChild(e);
+	return d.innerHTML;
+};
+
+/**
+ * Sets the outer HTML of a element, this uses the outerHTML
+ * property in MSIE and Opera and a workaround for Gecko.
+ *
+ * @param {HTMLElement} e HTML element to set outerHTML on.
+ * @param {string} h HTML string to set in property.
+ */
+TinyMCE_Engine.prototype.setOuterHTML = function(e, h) {
+	if (tinyMCE.isMSIE) {
+		e.outerHTML = h;
+		return;
+	}
+
+	var d = e.ownerDocument.createElement("body");
+	d.innerHTML = h;
+	e.parentNode.replaceChild(d.firstChild, e);
+};
+
+/**
+ * Returns a element by id, this will also search the form names to match the id.
+ *
+ * @param {string} id Id of element.
+ * @param {DOMDocument} d Optional document.
+ * @return HTML element that matches the id.
+ * @type HTMLElement
+ */
+TinyMCE_Engine.prototype._getElementById = function(id, d) {
+	var e, i, j, f;
+
+	if (typeof(d) == "undefined")
+		d = document;
+
+	e = d.getElementById(id);
+	if (!e) {
+		f = d.forms;
+
+		for (i=0; i<f.length; i++) {
+			for (j=0; j<f[i].elements.length; j++) {
+				if (f[i].elements[j].name == id) {
+					e = f[i].elements[j];
+					break;
+				}
+			}
+		}
+	}
+
+	return e;
+};
+
+/**
+ * Returns a array of nodes selected retrived from the child nodes of the specified node.
+ *
+ * @param {HTMLNode} n Node to get children from.
+ * @param {Array} na Array to fill with children.
+ * @param {int} t Node type to get.
+ * @param {string} nn Node name of items to retrive.
+ * @return Node array.
+ * @type Array
+ */
+TinyMCE_Engine.prototype.getNodeTree = function(n, na, t, nn) {
+	var i;
+
+	if (typeof(t) == "undefined" || n.nodeType == t && (typeof(nn) == "undefined" || n.nodeName == nn))
+		na[na.length] = n;
+
+	if (n.hasChildNodes()) {
+		for (i=0; i<n.childNodes.length; i++)
+			tinyMCE.getNodeTree(n.childNodes[i], na, t, nn);
+	}
+
+	return na;
+};
+
+/**
+ * Returns the parent element of the specified node based on the search criteria.
+ *
+ * @param {HTMLNode} node Node to get parent element of.
+ * @param {string} names Comma separated list of element names to get.
+ * @param {string} attrib_name Optional attribute name to match.
+ * @param {string} attrib_value Optional attribute value to match.
+ * @return HTMLElement or null based on search criteras.
+ * @type HTMLElement
+ */
+TinyMCE_Engine.prototype.getParentElement = function(node, names, attrib_name, attrib_value) {
+	if (typeof(names) == "undefined") {
+		if (node.nodeType == 1)
+			return node;
+
+		// Find parent node that is a element
+		while ((node = node.parentNode) != null && node.nodeType != 1) ;
+
+		return node;
+	}
+
+	if (node == null)
+		return null;
+
+	var namesAr = names.toUpperCase().split(',');
+
+	do {
+		for (var i=0; i<namesAr.length; i++) {
+			if (node.nodeName == namesAr[i] || names == "*") {
+				if (typeof(attrib_name) == "undefined")
+					return node;
+				else if (node.getAttribute(attrib_name)) {
+					if (typeof(attrib_value) == "undefined") {
+						if (node.getAttribute(attrib_name) != "")
+							return node;
+					} else if (node.getAttribute(attrib_name) == attrib_value)
+						return node;
+				}
+			}
+		}
+	} while ((node = node.parentNode) != null);
+
+	return null;
+};
+
+/**
+ * Returns a node by the specified selector function. This function will
+ * loop through all parent nodes and call the specified function for each node.
+ * If the function then returns true it will stop the execution and return that node.
+ *
+ * @param {DOMNode} n HTML node to search parents on.
+ * @param {function} f Selection function to execute on each node.
+ * @return DOMNode or null if it wasn't found.
+ * @type DOMNode
+ */
+TinyMCE_Engine.prototype.getParentNode = function(n, f) {
+	while (n) {
+		if (f(n))
+			return n;
+
+		n = n.parentNode;
+	}
+
+	return null;
+};
+
+/**
+ * Returns the attribute value of a element or the default value if it wasn't found.
+ *
+ * @param {HTMLElement} elm HTML element to get attribute from.
+ * @param {string} name Attribute name to retrive.
+ * @param {string} default_value Optional default value to return, this value defaults to a empty string.
+ * @return Attribute value or default value if it wasn't found in element.
+ * @type string
+ */
+TinyMCE_Engine.prototype.getAttrib = function(elm, name, default_value) {
+	if (typeof(default_value) == "undefined")
+		default_value = "";
+
+	// Not a element
+	if (!elm || elm.nodeType != 1)
+		return default_value;
+
+	var v = elm.getAttribute(name);
+
+	// Try className for class attrib
+	if (name == "class" && !v)
+		v = elm.className;
+
+	// Workaround for a issue with Firefox 1.5rc2+
+	if (tinyMCE.isGecko && name == "src" && elm.src != null && elm.src != "")
+		v = elm.src;
+
+	// Workaround for a issue with Firefox 1.5rc2+
+	if (tinyMCE.isGecko && name == "href" && elm.href != null && elm.href != "")
+		v = elm.href;
+
+	if (name == "http-equiv" && tinyMCE.isMSIE)
+		v = elm.httpEquiv;
+
+	if (name == "style" && !tinyMCE.isOpera)
+		v = elm.style.cssText;
+
+	return (v && v != "") ? v : default_value;
+};
+
+/**
+ * Sets the attribute value for a specific attribute.
+ *
+ * @param {HTMLElement} element HTML element to set attribute on.
+ * @param {string} name Attribute name to set.
+ * @param {string} value Attribute value to set.
+ * @param {boolean} fix_value Optional fix value state, if true only number data will be accepted.
+ */
+TinyMCE_Engine.prototype.setAttrib = function(element, name, value, fix_value) {
+	if (typeof(value) == "number" && value != null)
+		value = "" + value;
+
+	if (fix_value) {
+		if (value == null)
+			value = "";
+
+		var re = new RegExp('[^0-9%]', 'g');
+		value = value.replace(re, '');
+	}
+
+	if (name == "style")
+		element.style.cssText = value;
+
+	if (name == "class")
+		element.className = value;
+
+	if (value != null && value != "" && value != -1)
+		element.setAttribute(name, value);
+	else
+		element.removeAttribute(name);
+};
+
+/**
+ * Sets a style attribute item value.
+ *
+ * @param {HTMLElement} elm HTML element to set style attribute item on.
+ * @param {string} name Style item name to set.
+ * @param {string} value Style item value to set.
+ */
+TinyMCE_Engine.prototype.setStyleAttrib = function(elm, name, value) {
+	eval('elm.style.' + name + '=value;');
+
+	// Style attrib deleted
+	if (tinyMCE.isMSIE && value == null || value == '') {
+		var str = tinyMCE.serializeStyle(tinyMCE.parseStyle(elm.style.cssText));
+		elm.style.cssText = str;
+		elm.setAttribute("style", str);
+	}
+};
+
+/**
+ * Switches the CSS class of the specified element. This method also caches the
+ * elements in a lookup table for performance. This should only be used for TinyMCE main UI controls
+ * like buttons or select elements.
+ *
+ * @param {HTMLElement} ei Element to set CSS class on.
+ * @param {string} c CSS class to set.
+ */
+TinyMCE_Engine.prototype.switchClass = function(ei, c) {
+	var e;
+
+	if (tinyMCE.switchClassCache[ei])
+		e = tinyMCE.switchClassCache[ei];
+	else
+		e = tinyMCE.switchClassCache[ei] = document.getElementById(ei);
+
+	if (e) {
+		// Keep tile mode
+		if (tinyMCE.settings.button_tile_map && e.className && e.className.indexOf('mceTiledButton') == 0)
+			c = 'mceTiledButton ' + c;
+
+		e.className = c;
+	}
+};
+
+/**
+ * Returns the absolute x, y position of a node. The position will be returned in a object with
+ * two properties absLeft and absTop.
+ *
+ * @param {HTMLNode} n HTML element to get x, y position from.
+ * @return Absolute position of the specified element.
+ * @type TinyMCE_ElementPosition
+ */
+TinyMCE_Engine.prototype.getAbsPosition = function(n) {
+	var p = {absLeft : 0, absTop : 0};
+
+	while (n) {
+		p.absLeft += n.offsetLeft;
+		p.absTop += n.offsetTop;
+		n = n.offsetParent;
+	}
+
+	return p;
+};
+
+/**
+ * Finds any previous element by name. This will loop through the siblings
+ * inorder to find the specified element by name. If the element wasn't found
+ * it will return a null value. 
+ *
+ * @param {HTMLNode} e HTML node to search from.
+ * @param {string} n Comma separated list of element names to search for.
+ * @return HTML Element or null if it wasn't found.
+ * @type HTMLElement 
+ */
+TinyMCE_Engine.prototype.prevNode = function(e, n) {
+	var a = n.split(','), i;
+
+	while ((e = e.previousSibling) != null) {
+		for (i=0; i<a.length; i++) {
+			if (e.nodeName == a[i])
+				return e;
+		}
+	}
+
+	return null;
+};
+
+/**
+ * Finds any element after the current one by name. This will loop through the siblings
+ * inorder to find the specified element by name. If the element wasn't found
+ * it will return a null value. 
+ *
+ * @param {HTMLNode} e HTML node to search from.
+ * @param {string} n Comma separated list of element names to search for.
+ * @return HTML Element or null if it wasn't found.
+ * @type HTMLElement 
+ */
+TinyMCE_Engine.prototype.nextNode = function(e, n) {
+	var a = n.split(','), i;
+
+	while ((e = e.nextSibling) != null) {
+		for (i=0; i<a.length; i++) {
+			if (e.nodeName == a[i])
+				return e;
+		}
+	}
+
+	return null;
+};
+
+/**
+ * Returns a array of nodes when the specified function matches a node.
+ *
+ * @param {DOMNode} n Node to select children from.
+ * @param {function} f Function that returns true/false if the node is to be added or not.
+ * @param {Array} a Optional array to fill with nodes.
+ * @return Array with selected nodes.
+ * @type Array
+ */
+TinyMCE_Engine.prototype.selectNodes = function(n, f, a) {
+	var i;
+
+	if (!a)
+		a = new Array();
+
+	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;
+};
+
+/**
+ * Adds a CSS class to the specified element. It will remove any previous item with the same name
+ * so adding a class that already exists will move it to the end.
+ *
+ * @param {HTMLElement} e HTML element to add CSS class to.
+ * @param {string] c CSS class to add to HTML element.
+ * @param {boolean] b Optional parameter, if set to true, class will be added to the beginning.
+ * @return Returns the new class attribute value.
+ * @type string
+ */
+TinyMCE_Engine.prototype.addCSSClass = function(e, c, b) {
+	var o = this.removeCSSClass(e, c);
+
+	return e.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;
+};
+
+/**
+ * Removes the specified CSS class from the element.
+ *
+ * @param {HTMLElement} e HTML element to remove CSS class to.
+ * @param {string] c CSS class to remove to HTML element.
+ * @return Returns the new class attribute value.
+ * @type string
+ */
+TinyMCE_Engine.prototype.removeCSSClass = function(e, c) {
+	var a = this.explode(' ', e.className), i;
+
+	for (i=0; i<a.length; i++) {
+		if (a[i] == c)
+			a[i] = '';
+	}
+
+	return e.className = a.join(' ');
+};
+
+/**
+ * Renames the specified element to the specified name.
+ *
+ * @param {HTMLElement} e Element to rename.
+ * @param {string} n New name of the element.
+ * @param {DOMDocument} d Optional document reference.
+ */
+TinyMCE_Engine.prototype.renameElement = function(e, n, d) {
+	var ne, i, ar;
+
+	d = typeof(d) == "undefined" ? tinyMCE.selectedInstance.getDoc() : d;
+
+	if (e) {
+		ne = d.createElement(n);
+
+		ar = e.attributes;
+		for (i=ar.length-1; i>-1; i--) {
+			if (ar[i].specified && ar[i].nodeValue)
+				ne.setAttribute(ar[i].nodeName.toLowerCase(), ar[i].nodeValue);
+		}
+
+		ar = e.childNodes;
+		for (i=0; i<ar.length; i++)
+			ne.appendChild(ar[i].cloneNode(true));
+
+		e.parentNode.replaceChild(ne, e);
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Debug.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Debug.class.js.html new file mode 100644 index 000000000..6367643bb --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Debug.class.js.html @@ -0,0 +1,193 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Debug.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Debug.class.js'

+ +

+ +
+ + + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Debug.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:29 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ *
+ * The contents of this file will be wrapped in a class later on.
+ */
+
+/**
+ * Debugs the specified message to a screen.
+ *
+ * @param {1..n} Numerous arguments that will be outputed.
+ */
+TinyMCE_Engine.prototype.debug = function() {
+	var m = "", e, a, i;
+
+	e = document.getElementById("tinymce_debug");
+	if (!e) {
+		var d = document.createElement("div");
+		d.setAttribute("className", "debugger");
+		d.className = "debugger";
+		d.innerHTML = 'Debug output:<textarea id="tinymce_debug" style="width: 100%; height: 300px" wrap="nowrap" mce_editable="false"></textarea>';
+
+		document.body.appendChild(d);
+		e = document.getElementById("tinymce_debug");
+	}
+
+	a = this.debug.arguments;
+	for (i=0; i<a.length; i++) {
+		m += a[i];
+		if (i<a.length-1)
+			m += ', ';
+	}
+
+	e.value += m + "\n";
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Engine.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Engine.class.js.html new file mode 100644 index 000000000..407c5ef2b --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Engine.class.js.html @@ -0,0 +1,2890 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Engine.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Engine.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_Engine 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Engine.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:29 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * Core engine class for TinyMCE, a instance of this class is available as a global called tinyMCE.
+ *
+ * @constructor
+ */
+function TinyMCE_Engine() {
+	this.majorVersion = "2";
+	this.minorVersion = "0.6";
+	this.releaseDate = "2006-xx-xx";
+
+	this.instances = new Array();
+	this.switchClassCache = new Array();
+	this.windowArgs = new Array();
+	this.loadedFiles = new Array();
+	this.configs = new Array();
+	this.currentConfig = 0;
+	this.eventHandlers = new Array();
+
+	// Browser check
+	var ua = navigator.userAgent;
+	this.isMSIE = (navigator.appName == "Microsoft Internet Explorer");
+	this.isMSIE5 = this.isMSIE && (ua.indexOf('MSIE 5') != -1);
+	this.isMSIE5_0 = this.isMSIE && (ua.indexOf('MSIE 5.0') != -1);
+	this.isGecko = ua.indexOf('Gecko') != -1;
+	this.isSafari = ua.indexOf('Safari') != -1;
+	this.isOpera = ua.indexOf('Opera') != -1;
+	this.isMac = ua.indexOf('Mac') != -1;
+	this.isNS7 = ua.indexOf('Netscape/7') != -1;
+	this.isNS71 = ua.indexOf('Netscape/7.1') != -1;
+	this.dialogCounter = 0;
+	this.plugins = new Array();
+	this.themes = new Array();
+	this.menus = new Array();
+	this.loadedPlugins = new Array();
+	this.buttonMap = new Array();
+	this.isLoaded = false;
+
+	// Fake MSIE on Opera and if Opera fakes IE, Gecko or Safari cancel those
+	if (this.isOpera) {
+		this.isMSIE = true;
+		this.isGecko = false;
+		this.isSafari =  false;
+	}
+
+	// TinyMCE editor id instance counter
+	this.idCounter = 0;
+};
+
+TinyMCE_Engine.prototype = {
+	/**
+	 * Initializes TinyMCE with the specific configuration settings. This method
+	 * may be called multiple times when multiple instances with diffrent settings is to be created.
+	 *
+	 * @param {Array} Name/Value array of initialization settings.
+	 */
+	init : function(settings) {
+		var theme;
+
+		this.settings = settings;
+
+		// Check if valid browser has execcommand support
+		if (typeof(document.execCommand) == 'undefined')
+			return;
+
+		// Get script base path
+		if (!tinyMCE.baseURL) {
+			var elements = document.getElementsByTagName('script');
+
+			for (var i=0; i<elements.length; i++) {
+				if (elements[i].src && (elements[i].src.indexOf("tiny_mce.js") != -1 || elements[i].src.indexOf("tiny_mce_dev.js") != -1 || elements[i].src.indexOf("tiny_mce_src.js") != -1 || elements[i].src.indexOf("tiny_mce_gzip") != -1)) {
+					var src = elements[i].src;
+
+					tinyMCE.srcMode = (src.indexOf('_src') != -1 || src.indexOf('_dev') != -1) ? '_src' : '';
+					tinyMCE.gzipMode = src.indexOf('_gzip') != -1;
+					src = src.substring(0, src.lastIndexOf('/'));
+
+					if (settings.exec_mode == "src" || settings.exec_mode == "normal")
+						tinyMCE.srcMode = settings.exec_mode == "src" ? '_src' : '';
+
+					tinyMCE.baseURL = src;
+					break;
+				}
+			}
+		}
+
+		// Get document base path
+		this.documentBasePath = document.location.href;
+		if (this.documentBasePath.indexOf('?') != -1)
+			this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.indexOf('?'));
+		this.documentURL = this.documentBasePath;
+		this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.lastIndexOf('/'));
+
+		// If not HTTP absolute
+		if (tinyMCE.baseURL.indexOf('://') == -1 && tinyMCE.baseURL.charAt(0) != '/') {
+			// If site absolute
+			tinyMCE.baseURL = this.documentBasePath + "/" + tinyMCE.baseURL;
+		}
+
+		// Set default values on settings
+		this._def("mode", "none");
+		this._def("theme", "advanced");
+		this._def("plugins", "", true);
+		this._def("language", "en");
+		this._def("docs_language", this.settings['language']);
+		this._def("elements", "");
+		this._def("textarea_trigger", "mce_editable");
+		this._def("editor_selector", "");
+		this._def("editor_deselector", "mceNoEditor");
+		this._def("valid_elements", "+a[id|style|rel|rev|charset|hreflang|dir|lang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],-strong/-b[class|style],-em/-i[class|style],-strike[class|style],-u[class|style],#p[id|style|dir|class|align],-ol[class|style],-ul[class|style],-li[class|style],br,img[id|dir|lang|longdesc|usemap|style|class|src|onmouseover|onmouseout|border|alt=|title|hspace|vspace|width|height|align],-sub[style|class],-sup[style|class],-blockquote[dir|style],-table[border=0|cellspacing|cellpadding|width|height|class|align|summary|style|dir|id|lang|bgcolor|background|bordercolor],-tr[id|lang|dir|class|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor],tbody[id|class],thead[id|class],tfoot[id|class],-td[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|bgcolor|background|bordercolor|scope],-th[id|lang|dir|class|colspan|rowspan|width|height|align|valign|style|scope],caption[id|lang|dir|class|style],-div[id|dir|class|align|style],-span[style|class|align],-pre[class|align|style],address[class|align|style],-h1[id|style|dir|class|align],-h2[id|style|dir|class|align],-h3[id|style|dir|class|align],-h4[id|style|dir|class|align],-h5[id|style|dir|class|align],-h6[id|style|dir|class|align],hr[class|style],-font[face|size|style|id|class|dir|color],dd[id|class|title|style|dir|lang],dl[id|class|title|style|dir|lang],dt[id|class|title|style|dir|lang]");
+		this._def("extended_valid_elements", "");
+		this._def("invalid_elements", "");
+		this._def("encoding", "");
+		this._def("urlconverter_callback", tinyMCE.getParam("urlconvertor_callback", "TinyMCE_Engine.prototype.convertURL"));
+		this._def("save_callback", "");
+		this._def("debug", false);
+		this._def("force_br_newlines", false);
+		this._def("force_p_newlines", true);
+		this._def("add_form_submit_trigger", true);
+		this._def("relative_urls", true);
+		this._def("remove_script_host", true);
+		this._def("focus_alert", true);
+		this._def("document_base_url", this.documentURL);
+		this._def("visual", true);
+		this._def("visual_table_class", "mceVisualAid");
+		this._def("setupcontent_callback", "");
+		this._def("fix_content_duplication", true);
+		this._def("custom_undo_redo", true);
+		this._def("custom_undo_redo_levels", -1);
+		this._def("custom_undo_redo_keyboard_shortcuts", true);
+		this._def("custom_undo_redo_restore_selection", true);
+		this._def("verify_html", true);
+		this._def("apply_source_formatting", false);
+		this._def("directionality", "ltr");
+		this._def("cleanup_on_startup", false);
+		this._def("inline_styles", false);
+		this._def("convert_newlines_to_brs", false);
+		this._def("auto_reset_designmode", true);
+		this._def("entities", "39,#39,160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,34,quot,38,amp,60,lt,62,gt,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro", true);
+		this._def("entity_encoding", "named");
+		this._def("cleanup_callback", "");
+		this._def("add_unload_trigger", true);
+		this._def("ask", false);
+		this._def("nowrap", false);
+		this._def("auto_resize", false);
+		this._def("auto_focus", false);
+		this._def("cleanup", true);
+		this._def("remove_linebreaks", true);
+		this._def("button_tile_map", false);
+		this._def("submit_patch", true);
+		this._def("browsers", "msie,safari,gecko,opera", true);
+		this._def("dialog_type", "window");
+		this._def("accessibility_warnings", true);
+		this._def("accessibility_focus", true);
+		this._def("merge_styles_invalid_parents", "");
+		this._def("force_hex_style_colors", true);
+		this._def("trim_span_elements", true);
+		this._def("convert_fonts_to_spans", false);
+		this._def("doctype", '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">');
+		this._def("font_size_classes", '');
+		this._def("font_size_style_values", 'xx-small,x-small,small,medium,large,x-large,xx-large', true);
+		this._def("event_elements", 'a,img', true);
+		this._def("convert_urls", true);
+		this._def("table_inline_editing", false);
+		this._def("object_resizing", true);
+		this._def("custom_shortcuts", true);
+		this._def("convert_on_click", false);
+		this._def("content_css", '');
+		this._def("fix_list_elements", false);
+		this._def("fix_table_elements", false);
+
+		// Browser check IE
+		if (this.isMSIE && this.settings['browsers'].indexOf('msie') == -1)
+			return;
+
+		// Browser check Gecko
+		if (this.isGecko && this.settings['browsers'].indexOf('gecko') == -1)
+			return;
+
+		// Browser check Safari
+		if (this.isSafari && this.settings['browsers'].indexOf('safari') == -1)
+			return;
+
+		// Browser check Opera
+		if (this.isOpera && this.settings['browsers'].indexOf('opera') == -1)
+			return;
+
+		// If not super absolute make it so
+		var baseHREF = tinyMCE.settings['document_base_url'];
+		var h = document.location.href;
+		var p = h.indexOf('://');
+		if (p > 0 && document.location.protocol != "file:") {
+			p = h.indexOf('/', p + 3);
+			h = h.substring(0, p);
+
+			if (baseHREF.indexOf('://') == -1)
+				baseHREF = h + baseHREF;
+
+			tinyMCE.settings['document_base_url'] = baseHREF;
+			tinyMCE.settings['document_base_prefix'] = h;
+		}
+
+		// Trim away query part
+		if (baseHREF.indexOf('?') != -1)
+			baseHREF = baseHREF.substring(0, baseHREF.indexOf('?'));
+
+		this.settings['base_href'] = baseHREF.substring(0, baseHREF.lastIndexOf('/')) + "/";
+
+		theme = this.settings['theme'];
+		this.blockRegExp = new RegExp("^(h[1-6]|p|div|address|pre|form|table|li|ol|ul|td|blockquote|center|dl|dt|dd|dir|fieldset|form|noscript|noframes|menu|isindex|samp)$", "i");
+		this.posKeyCodes = new Array(13,45,36,35,33,34,37,38,39,40);
+		this.uniqueURL = 'javascript:TINYMCE_UNIQUEURL();'; // Make unique URL non real URL
+		this.uniqueTag = '<div id="mceTMPElement" style="display: none">TMP</div>';
+		this.callbacks = new Array('onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup');
+
+		// Theme url
+		this.settings['theme_href'] = tinyMCE.baseURL + "/themes/" + theme;
+
+		if (!tinyMCE.isMSIE)
+			this.settings['force_br_newlines'] = false;
+
+		if (tinyMCE.getParam("popups_css", false)) {
+			var cssPath = tinyMCE.getParam("popups_css", "");
+
+			// Is relative
+			if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')
+				this.settings['popups_css'] = this.documentBasePath + "/" + cssPath;
+			else
+				this.settings['popups_css'] = cssPath;
+		} else
+			this.settings['popups_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_popup.css";
+
+		if (tinyMCE.getParam("editor_css", false)) {
+			var cssPath = tinyMCE.getParam("editor_css", "");
+
+			// Is relative
+			if (cssPath.indexOf('://') == -1 && cssPath.charAt(0) != '/')
+				this.settings['editor_css'] = this.documentBasePath + "/" + cssPath;
+			else
+				this.settings['editor_css'] = cssPath;
+		} else
+			this.settings['editor_css'] = tinyMCE.baseURL + "/themes/" + theme + "/css/editor_ui.css";
+
+		if (tinyMCE.settings['debug']) {
+			var msg = "Debug: \n";
+
+			msg += "baseURL: " + this.baseURL + "\n";
+			msg += "documentBasePath: " + this.documentBasePath + "\n";
+			msg += "content_css: " + this.settings['content_css'] + "\n";
+			msg += "popups_css: " + this.settings['popups_css'] + "\n";
+			msg += "editor_css: " + this.settings['editor_css'] + "\n";
+
+			alert(msg);
+		}
+
+		// Only do this once
+		if (this.configs.length == 0) {
+			// Is Safari enabled
+			if (this.isSafari && this.getParam('safari_warning', false))
+				alert("Safari support is very limited and should be considered experimental.\nSo there is no need to even submit bugreports on this early version.\nYou can disable this message by setting: safari_warning option to false");
+
+			if (typeof(TinyMCECompressed) == "undefined") {
+				tinyMCE.addEvent(window, "DOMContentLoaded", TinyMCE_Engine.prototype.onLoad);
+
+				if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
+					if (document.body)
+						tinyMCE.addEvent(document.body, "readystatechange", TinyMCE_Engine.prototype.onLoad);
+					else
+						tinyMCE.addEvent(document, "readystatechange", TinyMCE_Engine.prototype.onLoad);
+				}
+
+				tinyMCE.addEvent(window, "load", TinyMCE_Engine.prototype.onLoad);
+				tinyMCE._addUnloadEvents();
+			}
+		}
+
+		this.loadScript(tinyMCE.baseURL + '/themes/' + this.settings['theme'] + '/editor_template' + tinyMCE.srcMode + '.js');
+		this.loadScript(tinyMCE.baseURL + '/langs/' + this.settings['language'] +  '.js');
+		this.loadCSS(this.settings['editor_css']);
+
+		// Add plugins
+		var p = tinyMCE.getParam('plugins', '', true, ',');
+		if (p.length > 0) {
+			for (var i=0; i<p.length; i++) {
+				if (p[i].charAt(0) != '-')
+					this.loadScript(tinyMCE.baseURL + '/plugins/' + p[i] + '/editor_plugin' + tinyMCE.srcMode + '.js');
+			}
+		}
+
+		// Setup entities
+		settings['cleanup_entities'] = new Array();
+		var entities = tinyMCE.getParam('entities', '', true, ',');
+		for (var i=0; i<entities.length; i+=2)
+			settings['cleanup_entities']['c' + entities[i]] = entities[i+1];
+
+		// Save away this config
+		settings['index'] = this.configs.length;
+		this.configs[this.configs.length] = settings;
+	},
+
+	/**
+	 * Adds unload event handles to execute triggerSave.
+	 *
+	 * @private
+	 */
+	_addUnloadEvents : function() {
+		if (tinyMCE.isMSIE) {
+			if (tinyMCE.settings['add_unload_trigger']) {
+				tinyMCE.addEvent(window, "unload", TinyMCE_Engine.prototype.unloadHandler);
+				tinyMCE.addEvent(window.document, "beforeunload", TinyMCE_Engine.prototype.unloadHandler);
+			}
+		} else {
+			if (tinyMCE.settings['add_unload_trigger'])
+				tinyMCE.addEvent(window, "unload", function () {tinyMCE.triggerSave(true, true);});
+		}
+	},
+
+	/**
+	 * Assigns a default value for a specific config parameter.
+	 *
+	 * @param {string} key Settings key to add default value to.
+	 * @param {object} def_val Default value to assign if the settings option isn't defined.
+	 * @param {boolean} t Trim all white space, if true all whitespace will be removed from option value.
+	 * @private
+	 */
+	_def : function(key, def_val, t) {
+		var v = tinyMCE.getParam(key, def_val);
+
+		v = t ? v.replace(/\s+/g,"") : v;
+
+		this.settings[key] = v;
+	},
+
+	/**
+	 * Returns true/false if the specified plugin is loaded or not.
+	 *
+	 * @param {string} n Plugin name to look for.
+	 * @return true/false if the specified plugin is loaded or not.
+	 * @type boolean
+	 */
+	hasPlugin : function(n) {
+		return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;
+	},
+
+	/**
+	 * Adds the specified plugin to the list of loaded plugins, this will also setup the baseURL
+	 * property of the plugin.
+	 *
+	 * @param {string} Plugin name/id.
+	 * @param {TinyMCE_Plugin} p Plugin instance to add.
+	 */
+	addPlugin : function(n, p) {
+		var op = this.plugins[n];
+
+		// Use the previous plugin object base URL used when loading external plugins
+		p.baseURL = op ? op.baseURL : tinyMCE.baseURL + "/plugins/" + n;
+		this.plugins[n] = p;
+	},
+
+	/**
+	 * Sets the baseURL of the specified plugin, this is useful if the plugin is loaded from
+	 * a external location.
+	 *
+	 * @param {string} n Plugin name/id to set base URL on. This have to be added before.
+	 * @param {string} u Base URL of plugin, this string should be the URL prefix for the plugin without a trailing slash.
+	 */
+	setPluginBaseURL : function(n, u) {
+		var op = this.plugins[n];
+
+		if (op)
+			op.baseURL = u;
+		else
+			this.plugins[n] = {baseURL : u};
+	},
+
+	/**
+	 * Load plugin from external URL.
+	 *
+	 * @param {string} n Plugin name for example \"emotions\".
+	 * @param {string} u URL of plugin directory to load.
+	 */
+	loadPlugin : function(n, u) {
+		u = u.indexOf('.js') != -1 ? u.substring(0, u.lastIndexOf('/')) : u;
+		u = u.charAt(u.length-1) == '/' ? u.substring(0, u.length-1) : u;
+		this.plugins[n] = {baseURL : u};
+		this.loadScript(u + "/editor_plugin" + (tinyMCE.srcMode ? '_src' : '') + ".js");
+	},
+
+	/**
+	 * Returns true/false if the specified theme is loaded or not.
+	 *
+	 * @param {string} n Theme name/id to check for.
+	 * @return true/false if the specified theme is loaded or not.
+	 * @type boolean
+	 */
+	hasTheme : function(n) {
+		return typeof(this.themes[n]) != "undefined" && this.themes[n] != null;
+	},
+
+	/**
+	 * Adds the specified theme in to the list of loaded themes.
+	 *
+	 * @param {string} n Theme name/id to add the object reference to.
+	 * @param {TinyMCE_Theme} t Theme instance to add to the loaded list.
+	 */
+	addTheme : function(n, t) {
+		this.themes[n] = t;
+	},
+
+	/**
+	 * Adds a floating menu instance to TinyMCE.
+	 *
+	 * @param {string} n TinyMCE menu id.
+	 * @param {TinyMCE_Menu} m TinyMCE menu instance.
+	 */
+	addMenu : function(n, m) {
+		this.menus[n] = m;
+	},
+
+	/**
+	 * Checks if the specified menu by name is added to TinyMCE.
+	 *
+	 * @param {string} n TinyMCE menu id.
+	 * @return true/false if it exists or not.
+	 * @type boolean
+	 */
+	hasMenu : function(n) {
+		return typeof(this.plugins[n]) != "undefined" && this.plugins[n] != null;
+	},
+
+	/**
+	 * Loads the specified script by writing the a script tag to the current page.
+	 * This will also check if the file has been loaded before. This function should only be used
+	 * when the page is loading.
+	 *
+	 * @param {string} url Script URL to load.
+	 */
+	loadScript : function(url) {
+		for (var i=0; i<this.loadedFiles.length; i++) {
+			if (this.loadedFiles[i] == url)
+				return;
+		}
+
+		document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + url + '"></script>');
+
+		this.loadedFiles[this.loadedFiles.length] = url;
+	},
+
+	/**
+	 * Loads the specified CSS by writing the a link tag to the current page.
+	 * This will also check if the file has been loaded before. This function should only be used
+	 * when the page is loading.
+	 *
+	 * @param {string} url CSS file URL to load or comma separated list of files.
+	 */
+	loadCSS : function(url) {
+		var ar = url.replace(/\s+/, '').split(',');
+		var lflen = 0, csslen = 0;
+		var skip = false;
+		var x = 0, i = 0;
+
+		for (x = 0,csslen = ar.length; x<csslen; x++) {
+			ignore_css = false;
+
+			if (ar[x] != null && ar[x] != 'null' && ar[x].length > 0) {
+				/* Make sure it doesn't exist. */
+				for (i=0, lflen=this.loadedFiles.length; i<lflen; i++) {
+					if (this.loadedFiles[i] == ar[x]) {
+						skip = true;
+						break;
+					}
+				}
+
+				if (!skip) {
+					document.write('<link href="' + ar[x] + '" rel="stylesheet" type="text/css" />');
+					this.loadedFiles[this.loadedFiles.length] = ar[x];
+				}
+			}
+		}
+	},
+
+	/**
+	 * Imports a CSS file into a allready loaded document. This will add a link element
+	 * to the head element of the document.
+	 *
+	 * @param {DOMDocument} doc DOM Document to load CSS into.
+	 * @param {string} css CSS File URL to load or comma separated list of files.
+	 */
+	importCSS : function(doc, css) {
+		var css_ary = css.replace(/\s+/, '').split(',');
+		var csslen, elm, headArr, x, css_file;
+
+		for (x = 0, csslen = css_ary.length; x<csslen; x++) {
+			css_file = css_ary[x];
+
+			if (css_file != null && css_file != 'null' && css_file.length > 0) {
+				// Is relative, make absolute
+				if (css_file.indexOf('://') == -1 && css_file.charAt(0) != '/')
+					css_file = this.documentBasePath + "/" + css_file;
+
+				if (typeof(doc.createStyleSheet) == "undefined") {
+					elm = doc.createElement("link");
+
+					elm.rel = "stylesheet";
+					elm.href = css_file;
+
+					if ((headArr = doc.getElementsByTagName("head")) != null && headArr.length > 0)
+						headArr[0].appendChild(elm);
+				} else
+					doc.createStyleSheet(css_file);
+			}
+		}
+	},
+
+	/**
+	 * Displays a confirm dialog when a user clicks/focus a textarea that is to be converted into
+	 * a TinyMCE instance.
+	 *
+	 * @param {DOMEvent} e DOM event instance.
+	 * @param {Array} settings Name/Value array of initialization settings.
+	 */
+	confirmAdd : function(e, settings) {
+		var elm = tinyMCE.isMSIE ? event.srcElement : e.target;
+		var elementId = elm.name ? elm.name : elm.id;
+
+		tinyMCE.settings = settings;
+
+		if (tinyMCE.settings['convert_on_click'] || (!elm.getAttribute('mce_noask') && confirm(tinyMCELang['lang_edit_confirm'])))
+			tinyMCE.addMCEControl(elm, elementId);
+
+		elm.setAttribute('mce_noask', 'true');
+	},
+
+	/**
+	 * Moves the contents from the hidden textarea to the editor that gets inserted.
+	 *
+	 * @param {string} form_element_name Form element name to move contents from.
+	 * @deprecated
+	 */
+	updateContent : function(form_element_name) {
+		// Find MCE instance linked to given form element and copy it's value
+		var formElement = document.getElementById(form_element_name);
+		for (var n in tinyMCE.instances) {
+			var inst = tinyMCE.instances[n];
+			if (!tinyMCE.isInstance(inst))
+				continue;
+
+			inst.switchSettings();
+
+			if (inst.formElement == formElement) {
+				var doc = inst.getDoc();
+		
+				tinyMCE._setHTML(doc, inst.formElement.value);
+
+				if (!tinyMCE.isMSIE)
+					doc.body.innerHTML = tinyMCE._cleanupHTML(inst, doc, this.settings, doc.body, inst.visualAid);
+			}
+		}
+	},
+
+	/**
+	 * Adds a TinyMCE editor control instance to a specific form element.
+	 *
+	 * @param {HTMLElement} replace_element HTML element object to replace.
+	 * @param {string} form_element_name HTML form element name,
+	 * @param {DOMDocument} target_document Target document that holds the element.
+	 */
+	addMCEControl : function(replace_element, form_element_name, target_document) {
+		var id = "mce_editor_" + tinyMCE.idCounter++;
+		var inst = new TinyMCE_Control(tinyMCE.settings);
+
+		inst.editorId = id;
+		this.instances[id] = inst;
+
+		inst._onAdd(replace_element, form_element_name, target_document);
+	},
+
+	/**
+	 * Removes a TinyMCE editor control instance by id.
+	 *
+	 * @param {string} editor_id Id of editor instance to remove.
+	 */
+	removeMCEControl : function(editor_id) {
+		var inst = tinyMCE.getInstanceById(editor_id);
+
+		if (inst) {
+			inst.switchSettings();
+
+			editor_id = inst.editorId;
+			var html = tinyMCE.getContent(editor_id);
+
+			// Remove editor instance from instances array
+			var tmpInstances = new Array();
+			for (var instanceName in tinyMCE.instances) {
+				var instance = tinyMCE.instances[instanceName];
+				if (!tinyMCE.isInstance(instance))
+					continue;
+
+				if (instanceName != editor_id)
+						tmpInstances[instanceName] = instance;
+			}
+			tinyMCE.instances = tmpInstances;
+
+			tinyMCE.selectedElement = null;
+			tinyMCE.selectedInstance = null;
+
+			// Remove element
+			var replaceElement = document.getElementById(editor_id + "_parent");
+			var oldTargetElement = inst.oldTargetElement;
+			var targetName = oldTargetElement.nodeName.toLowerCase();
+
+			if (targetName == "textarea" || targetName == "input") {
+				// Just show the old text area
+				replaceElement.parentNode.removeChild(replaceElement);
+				oldTargetElement.style.display = "inline";
+				oldTargetElement.value = html;
+			} else {
+				oldTargetElement.innerHTML = html;
+				oldTargetElement.style.display = 'block';
+
+				replaceElement.parentNode.insertBefore(oldTargetElement, replaceElement);
+				replaceElement.parentNode.removeChild(replaceElement);
+			}
+		}
+	},
+
+	/**
+	 * Moves the contents from a TinyMCE editor control instance to the hidden textarea
+	 * that got replaced with TinyMCE. This is executed automaticly on for example form submit.
+	 *
+	 * @param {boolean} skip_cleanup Optional Skip cleanup, simply move the contents as fast as possible.
+	 * @param {boolean} skip_callback Optional Skip callback, don't call the save_callback function.
+	 */
+	triggerSave : function(skip_cleanup, skip_callback) {
+		var inst, n;
+
+		// Default to false
+		if (typeof(skip_cleanup) == "undefined")
+			skip_cleanup = false;
+
+		// Default to false
+		if (typeof(skip_callback) == "undefined")
+			skip_callback = false;
+
+		// Cleanup and set all form fields
+		for (n in tinyMCE.instances) {
+			inst = tinyMCE.instances[n];
+
+			if (!tinyMCE.isInstance(inst))
+				continue;
+
+			inst.triggerSave(skip_cleanup, skip_callback);
+		}
+	},
+
+	/**
+	 * Resets a forms TinyMCE instances based on form index.
+	 *
+	 * @param {int} form_index Form index to reset.
+	 */
+	resetForm : function(form_index) {
+		var i, inst, n, formObj = document.forms[form_index];
+
+		for (n in tinyMCE.instances) {
+			inst = tinyMCE.instances[n];
+
+			if (!tinyMCE.isInstance(inst))
+				continue;
+
+			inst.switchSettings();
+
+			for (i=0; i<formObj.elements.length; i++) {
+				if (inst.formTargetElementId == formObj.elements[i].name)
+					inst.getBody().innerHTML = inst.startContent;
+			}
+		}
+	},
+
+	/**
+	 * Executes a command on a specific editor instance by id.
+	 *
+	 * @param {string} editor_id TinyMCE editor control instance id to perform comman on.
+	 * @param {string} command Command name to execute, for example mceLink or Bold.
+	 * @param {boolean} user_interface True/false state if a UI (dialog) should be presented or not.
+	 * @param {object} value Optional command value, this can be anything.
+	 * @param {boolean} focus True/false if the editor instance should be focused first.
+	 */
+	execInstanceCommand : function(editor_id, command, user_interface, value, focus) {
+		var inst = tinyMCE.getInstanceById(editor_id);
+		if (inst) {
+			if (typeof(focus) == "undefined")
+				focus = true;
+
+			if (focus)
+				inst.contentWindow.focus();
+
+			// Reset design mode if lost
+			inst.autoResetDesignMode();
+
+			this.selectedElement = inst.getFocusElement();
+			this.selectedInstance = inst;
+			tinyMCE.execCommand(command, user_interface, value);
+
+			// Cancel event so it doesn't call onbeforeonunlaod
+			if (tinyMCE.isMSIE && window.event != null)
+				tinyMCE.cancelEvent(window.event);
+		}
+	},
+
+	/**
+	 * Executes a command on the selected or last selected TinyMCE editor control instance. This function also handles
+	 * some non instance specific commands like mceAddControl, mceRemoveControl, mceHelp or mceFocus.
+	 *
+	 * @param {string} command Command name to execute, for example mceLink or Bold.
+	 * @param {boolean} user_interface True/false state if a UI (dialog) should be presented or not.
+	 * @param {object} value Optional command value, this can be anything.
+	 */
+	execCommand : function(command, user_interface, value) {
+		// Default input
+		user_interface = user_interface ? user_interface : false;
+		value = value ? value : null;
+
+		if (tinyMCE.selectedInstance)
+			tinyMCE.selectedInstance.switchSettings();
+
+		switch (command) {
+			case 'mceHelp':
+				tinyMCE.openWindow({
+					file : 'about.htm',
+					width : 480,
+					height : 380
+				}, {
+					tinymce_version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion,
+					tinymce_releasedate : tinyMCE.releaseDate,
+					inline : "yes"
+				});
+			return;
+
+			case 'mceFocus':
+				var inst = tinyMCE.getInstanceById(value);
+				if (inst)
+					inst.contentWindow.focus();
+			return;
+
+			case "mceAddControl":
+			case "mceAddEditor":
+				tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
+				return;
+
+			case "mceAddFrameControl":
+				tinyMCE.addMCEControl(tinyMCE._getElementById(value['element'], value['document']), value['element'], value['document']);
+				return;
+
+			case "mceRemoveControl":
+			case "mceRemoveEditor":
+				tinyMCE.removeMCEControl(value);
+				return;
+
+			case "mceResetDesignMode":
+				// Resets the designmode state of the editors in Gecko
+				if (!tinyMCE.isMSIE) {
+					for (var n in tinyMCE.instances) {
+						if (!tinyMCE.isInstance(tinyMCE.instances[n]))
+							continue;
+
+						try {
+							tinyMCE.instances[n].getDoc().designMode = "on";
+						} catch (e) {
+							// Ignore any errors
+						}
+					}
+				}
+
+				return;
+		}
+
+		if (this.selectedInstance) {
+			this.selectedInstance.execCommand(command, user_interface, value);
+		} else if (tinyMCE.settings['focus_alert'])
+			alert(tinyMCELang['lang_focus_alert']);
+	},
+
+	/**
+	 * Creates a iframe editor container for the specified element.
+	 *
+	 * @param {HTMLElement} replace_element Element to replace with iframe element.
+	 * @param {DOMDocument} doc Optional document to use with iframe replacement.
+	 * @param {DOMWindow} win Optional window to use with iframe replacement.
+	 * @private
+	 */
+	_createIFrame : function(replace_element, doc, win) {
+		var iframe, id = replace_element.getAttribute("id");
+		var aw, ah;
+
+		if (typeof(doc) == "undefined")
+			doc = document;
+
+		if (typeof(win) == "undefined")
+			win = window;
+
+		iframe = doc.createElement("iframe");
+
+		aw = "" + tinyMCE.settings['area_width'];
+		ah = "" + tinyMCE.settings['area_height'];
+
+		if (aw.indexOf('%') == -1) {
+			aw = parseInt(aw);
+			aw = aw < 0 ? 300 : aw;
+			aw = aw + "px";
+		}
+
+		if (ah.indexOf('%') == -1) {
+			ah = parseInt(ah);
+			ah = ah < 0 ? 240 : ah;
+			ah = ah + "px";
+		}
+
+		iframe.setAttribute("id", id);
+		iframe.setAttribute("className", "mceEditorIframe");
+		iframe.setAttribute("border", "0");
+		iframe.setAttribute("frameBorder", "0");
+		iframe.setAttribute("marginWidth", "0");
+		iframe.setAttribute("marginHeight", "0");
+		iframe.setAttribute("leftMargin", "0");
+		iframe.setAttribute("topMargin", "0");
+		iframe.setAttribute("width", aw);
+		iframe.setAttribute("height", ah);
+		iframe.setAttribute("allowtransparency", "true");
+
+		if (tinyMCE.settings["auto_resize"])
+			iframe.setAttribute("scrolling", "no");
+
+		// Must have a src element in MSIE HTTPs breaks aswell as absoute URLs
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+			iframe.setAttribute("src", this.settings['default_document']);
+
+		iframe.style.width = aw;
+		iframe.style.height = ah;
+
+		// MSIE 5.0 issue
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+			replace_element.outerHTML = iframe.outerHTML;
+		else
+			replace_element.parentNode.replaceChild(iframe, replace_element);
+
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+			return win.frames[id];
+		else
+			return iframe;
+	},
+
+	/**
+	 * Setups the contents of TinyMCE editor instance and fills it with contents.
+	 *
+	 * @param {string} editor_id TinyMCE editor instance control id to fill.
+	 */
+	setupContent : function(editor_id) {
+		var inst = tinyMCE.instances[editor_id];
+		var doc = inst.getDoc();
+		var head = doc.getElementsByTagName('head').item(0);
+		var content = inst.startContent;
+
+		inst.switchSettings();
+
+		// Not loaded correctly hit it again, Mozilla bug #997860
+		if (!tinyMCE.isMSIE && tinyMCE.getParam("setupcontent_reload", false) && doc.title != "blank_page") {
+			// This part will remove the designMode status
+			// Failes first time in Firefox 1.5b2 on Mac
+			try {doc.location.href = tinyMCE.baseURL + "/blank.htm";} catch (ex) {}
+			window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 1000);
+			return;
+		}
+
+		if (!head) {
+			window.setTimeout("tinyMCE.setupContent('" + editor_id + "');", 10);
+			return;
+		}
+
+		// Import theme specific content CSS the user specific
+		tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/themes/" + inst.settings['theme'] + "/css/editor_content.css");
+		tinyMCE.importCSS(inst.getDoc(), inst.settings['content_css']);
+		tinyMCE.dispatchCallback(inst, 'init_instance_callback', 'initInstance', inst);
+
+		// Setup keyboard shortcuts
+		if (tinyMCE.getParam('custom_undo_redo_keyboard_shortcuts')) {
+			inst.addShortcut('ctrl', 'z', 'lang_undo_desc', 'Undo');
+			inst.addShortcut('ctrl', 'y', 'lang_redo_desc', 'Redo');
+		}
+
+		// Add default shortcuts for gecko
+		if (tinyMCE.isGecko) {
+			inst.addShortcut('ctrl', 'b', 'lang_bold_desc', 'Bold');
+			inst.addShortcut('ctrl', 'i', 'lang_italic_desc', 'Italic');
+			inst.addShortcut('ctrl', 'u', 'lang_underline_desc', 'Underline');
+		}
+
+		// Setup span styles
+		if (tinyMCE.getParam("convert_fonts_to_spans"))
+			inst.getDoc().body.setAttribute('id', 'mceSpanFonts');
+
+		if (tinyMCE.settings['nowrap'])
+			doc.body.style.whiteSpace = "nowrap";
+
+		doc.body.dir = this.settings['directionality'];
+		doc.editorId = editor_id;
+
+		// Add on document element in Mozilla
+		if (!tinyMCE.isMSIE)
+			doc.documentElement.editorId = editor_id;
+
+		inst.setBaseHREF(tinyMCE.settings['base_href']);
+
+		// Replace new line characters to BRs
+		if (tinyMCE.settings['convert_newlines_to_brs']) {
+			content = tinyMCE.regexpReplace(content, "\r\n", "<br />", "gi");
+			content = tinyMCE.regexpReplace(content, "\r", "<br />", "gi");
+			content = tinyMCE.regexpReplace(content, "\n", "<br />", "gi");
+		}
+
+		// Open closed anchors
+	//	content = content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');
+
+		// Call custom cleanup code
+		content = tinyMCE.storeAwayURLs(content);
+		content = tinyMCE._customCleanup(inst, "insert_to_editor", content);
+
+		if (tinyMCE.isMSIE) {
+			// Ugly!!!
+			window.setInterval('try{tinyMCE.getCSSClasses(tinyMCE.instances["' + editor_id + '"].getDoc(), "' + editor_id + '");}catch(e){}', 500);
+
+			if (tinyMCE.settings["force_br_newlines"])
+				doc.styleSheets[0].addRule("p", "margin: 0;");
+
+			var body = inst.getBody();
+			body.editorId = editor_id;
+		}
+
+		content = tinyMCE.cleanupHTMLCode(content);
+
+		// Fix for bug #958637
+		if (!tinyMCE.isMSIE) {
+			var contentElement = inst.getDoc().createElement("body");
+			var doc = inst.getDoc();
+
+			contentElement.innerHTML = content;
+
+			// Remove weridness!
+			if (tinyMCE.isGecko && tinyMCE.settings['remove_lt_gt'])
+				content = content.replace(new RegExp('&lt;&gt;', 'g'), "");
+
+			if (tinyMCE.settings['cleanup_on_startup'])
+				tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, doc, this.settings, contentElement));
+			else {
+				// Convert all strong/em to b/i
+				content = tinyMCE.regexpReplace(content, "<strong", "<b", "gi");
+				content = tinyMCE.regexpReplace(content, "<em(/?)>", "<i$1>", "gi");
+				content = tinyMCE.regexpReplace(content, "<em ", "<i ", "gi");
+				content = tinyMCE.regexpReplace(content, "</strong>", "</b>", "gi");
+				content = tinyMCE.regexpReplace(content, "</em>", "</i>", "gi");
+				tinyMCE.setInnerHTML(inst.getBody(), content);
+			}
+
+			tinyMCE.convertAllRelativeURLs(inst.getBody());
+		} else {
+			if (tinyMCE.settings['cleanup_on_startup']) {
+				tinyMCE._setHTML(inst.getDoc(), content);
+
+				// Produces permission denied error in MSIE 5.5
+				eval('try {tinyMCE.setInnerHTML(inst.getBody(), tinyMCE._cleanupHTML(inst, inst.contentDocument, this.settings, inst.getBody()));} catch(e) {}');
+			} else
+				tinyMCE._setHTML(inst.getDoc(), content);
+		}
+
+		// Fix for bug #957681
+		//inst.getDoc().designMode = inst.getDoc().designMode;
+
+		// Setup element references
+		var parentElm = inst.targetDoc.getElementById(inst.editorId + '_parent');
+		inst.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
+
+		tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual'], inst);
+		tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc());
+
+		// Re-add design mode on mozilla
+		if (!tinyMCE.isMSIE)
+			tinyMCE.addEventHandlers(inst);
+
+		// Add blur handler
+		if (tinyMCE.isMSIE) {
+			tinyMCE.addEvent(inst.getBody(), "blur", TinyMCE_Engine.prototype._eventPatch);
+			tinyMCE.addEvent(inst.getBody(), "beforedeactivate", TinyMCE_Engine.prototype._eventPatch); // Bug #1439953
+
+			// Workaround for drag drop/copy paste base href bug
+			if (!tinyMCE.isOpera) {
+				tinyMCE.addEvent(doc.body, "mousemove", TinyMCE_Engine.prototype.onMouseMove);
+				tinyMCE.addEvent(doc.body, "beforepaste", TinyMCE_Engine.prototype._eventPatch);
+				tinyMCE.addEvent(doc.body, "drop", TinyMCE_Engine.prototype._eventPatch);
+			}
+		}
+
+		// Trigger node change, this call locks buttons for tables and so forth
+		tinyMCE.selectedInstance = inst;
+		tinyMCE.selectedElement = inst.contentWindow.document.body;
+
+		// Call custom DOM cleanup
+		tinyMCE._customCleanup(inst, "insert_to_editor_dom", inst.getBody());
+		tinyMCE._customCleanup(inst, "setup_content_dom", inst.getBody());
+		tinyMCE._setEventsEnabled(inst.getBody(), false);
+		tinyMCE.cleanupAnchors(inst.getDoc());
+
+		if (tinyMCE.getParam("convert_fonts_to_spans"))
+			tinyMCE.convertSpansToFonts(inst.getDoc());
+
+		inst.startContent = tinyMCE.trim(inst.getBody().innerHTML);
+		inst.undoRedo.add({ content : inst.startContent });
+
+		// Cleanup any mess left from storyAwayURLs
+		if (tinyMCE.isGecko) {
+			// Remove mce_src from textnodes and comments
+			tinyMCE.selectNodes(inst.getBody(), function(n) {
+				if (n.nodeType == 3 || n.nodeType == 8) {
+					n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), "");
+					n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), "");
+				}
+
+				return false;
+			});
+		}
+
+		// Cleanup any mess left from storyAwayURLs
+		tinyMCE._removeInternal(inst.getBody());
+
+		tinyMCE.selectedInstance = inst;
+		tinyMCE.triggerNodeChange(false, true);
+	},
+
+	/**
+	 * Stores away the src and href attribute values in separate mce_src and mce_href attributes.
+	 * This is needed since both MSIE and Gecko messes with these attributes. The old
+	 * src and href will be intact, this simply adds them to a separate attribute.
+	 *
+	 * @param {string} s HTML string to replace src and href attributes in.
+	 * @return HTML string with replaced src and href attributes.
+	 * @type string
+	 */
+	storeAwayURLs : function(s) {
+		// Remove all mce_src, mce_href and replace them with new ones
+	//	s = s.replace(new RegExp('mce_src\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');
+	//	s = s.replace(new RegExp('mce_href\\s*=\\s*\"[^ >\"]*\"', 'gi'), '');
+
+		if (!s.match(/(mce_src|mce_href)/gi, s)) {
+			s = s.replace(new RegExp('src\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'src="$1" mce_src="$1"');
+			s = s.replace(new RegExp('href\\s*=\\s*\"([^ >\"]*)\"', 'gi'), 'href="$1" mce_href="$1"');
+		}
+
+		return s;
+	},
+
+	/**
+	 * Removes any internal content inserted by regexps.
+	 *
+	 * @param {DOMNode} n Node to remove internal content from.
+	 */
+	_removeInternal : function(n) {
+		if (tinyMCE.isGecko) {
+			// Remove mce_src from textnodes and comments
+			tinyMCE.selectNodes(n, function(n) {
+				if (n.nodeType == 3 || n.nodeType == 8) {
+					n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_src=\"[^\"]*\"', 'gi'), "");
+					n.nodeValue = n.nodeValue.replace(new RegExp('\\smce_href=\"[^\"]*\"', 'gi'), "");
+				}
+
+				return false;
+			});
+		}
+	},
+
+	/**
+	 * Removes/disables TinyMCE built in form elements such as select boxes for font sizes etc.
+	 * These are disabled when the user submits a form so they don't get picked up by the backend script
+	 * that intercepts the contents.
+	 *
+	 * @param {HTMLElement} form_obj Form object to loop through for TinyMCE specific form elements.
+	 */
+	removeTinyMCEFormElements : function(form_obj) {
+		// Check if form is valid
+		if (typeof(form_obj) == "undefined" || form_obj == null)
+			return;
+
+		// If not a form, find the form
+		if (form_obj.nodeName != "FORM") {
+			if (form_obj.form)
+				form_obj = form_obj.form;
+			else
+				form_obj = tinyMCE.getParentElement(form_obj, "form");
+		}
+
+		// Still nothing
+		if (form_obj == null)
+			return;
+
+		// Disable all UI form elements that TinyMCE created
+		for (var i=0; i<form_obj.elements.length; i++) {
+			var elementId = form_obj.elements[i].name ? form_obj.elements[i].name : form_obj.elements[i].id;
+
+			if (elementId.indexOf('mce_editor_') == 0)
+				form_obj.elements[i].disabled = true;
+		}
+	},
+
+	/**
+	 * Event handler function that gets executed each time a event occurs in a TinyMCE editor control instance.
+	 * Todo: Fix the return statements so they return true or false.
+	 *
+	 * @param {DOMEvent} e DOM event object reference.
+	 * @return true - if the event is to be chained, false - if the event chain is to be canceled.
+	 * @type boolean
+	 */
+	handleEvent : function(e) {
+		var inst = tinyMCE.selectedInstance;
+
+		// Remove odd, error
+		if (typeof(tinyMCE) == "undefined")
+			return true;
+
+		//tinyMCE.debug(e.type + " " + e.target.nodeName + " " + (e.relatedTarget ? e.relatedTarget.nodeName : ""));
+
+		if (tinyMCE.executeCallback(tinyMCE.selectedInstance, 'handle_event_callback', 'handleEvent', e))
+			return false;
+
+		switch (e.type) {
+			case "beforedeactivate": // Was added due to bug #1439953
+			case "blur":
+				if (tinyMCE.selectedInstance)
+					tinyMCE.selectedInstance.execCommand('mceEndTyping');
+
+				tinyMCE.hideMenus();
+
+				return;
+
+			// Workaround for drag drop/copy paste base href bug
+			case "drop":
+			case "beforepaste":
+				if (tinyMCE.selectedInstance)
+					tinyMCE.selectedInstance.setBaseHREF(null);
+
+				window.setTimeout("tinyMCE.selectedInstance.setBaseHREF(tinyMCE.settings['base_href']);", 1);
+				return;
+
+			case "submit":
+				tinyMCE.removeTinyMCEFormElements(tinyMCE.isMSIE ? window.event.srcElement : e.target);
+				tinyMCE.triggerSave();
+				tinyMCE.isNotDirty = true;
+				return;
+
+			case "reset":
+				var formObj = tinyMCE.isMSIE ? window.event.srcElement : e.target;
+
+				for (var i=0; i<document.forms.length; i++) {
+					if (document.forms[i] == formObj)
+						window.setTimeout('tinyMCE.resetForm(' + i + ');', 10);
+				}
+
+				return;
+
+			case "keypress":
+				if (inst && inst.handleShortcut(e))
+					return false;
+
+				if (e.target.editorId) {
+					tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
+				} else {
+					if (e.target.ownerDocument.editorId)
+						tinyMCE.selectedInstance = tinyMCE.instances[e.target.ownerDocument.editorId];
+				}
+
+				if (tinyMCE.selectedInstance)
+					tinyMCE.selectedInstance.switchSettings();
+
+				// Insert P element
+				if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && e.keyCode == 13 && !e.shiftKey) {
+					// Insert P element instead of BR
+					if (TinyMCE_ForceParagraphs._insertPara(tinyMCE.selectedInstance, e)) {
+						// Cancel event
+						tinyMCE.execCommand("mceAddUndoLevel");
+						tinyMCE.cancelEvent(e);
+						return false;
+					}
+				}
+
+				// Handle backspace
+				if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
+					// Insert P element instead of BR
+					if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
+						// Cancel event
+						tinyMCE.execCommand("mceAddUndoLevel");
+						tinyMCE.cancelEvent(e);
+						return false;
+					}
+				}
+
+				// Return key pressed
+				if (tinyMCE.isMSIE && tinyMCE.settings['force_br_newlines'] && e.keyCode == 13) {
+					if (e.target.editorId)
+						tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
+
+					if (tinyMCE.selectedInstance) {
+						var sel = tinyMCE.selectedInstance.getDoc().selection;
+						var rng = sel.createRange();
+
+						if (tinyMCE.getParentElement(rng.parentElement(), "li") != null)
+							return false;
+
+						// Cancel event
+						e.returnValue = false;
+						e.cancelBubble = true;
+
+						// Insert BR element
+						rng.pasteHTML("<br />");
+						rng.collapse(false);
+						rng.select();
+
+						tinyMCE.execCommand("mceAddUndoLevel");
+						tinyMCE.triggerNodeChange(false);
+						return false;
+					}
+				}
+
+				// Backspace or delete
+				if (e.keyCode == 8 || e.keyCode == 46) {
+					tinyMCE.selectedElement = e.target;
+					tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a");
+					tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img");
+					tinyMCE.triggerNodeChange(false);
+				}
+
+				return false;
+			break;
+
+			case "keyup":
+			case "keydown":
+				tinyMCE.hideMenus();
+				tinyMCE.hasMouseMoved = false;
+
+				if (inst && inst.handleShortcut(e))
+					return false;
+
+				if (e.target.editorId)
+					tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
+				else
+					return;
+
+				if (tinyMCE.selectedInstance)
+					tinyMCE.selectedInstance.switchSettings();
+
+				var inst = tinyMCE.selectedInstance;
+
+				// Handle backspace
+				if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) {
+					// Insert P element instead of BR
+					if (TinyMCE_ForceParagraphs._handleBackSpace(tinyMCE.selectedInstance, e.type)) {
+						// Cancel event
+						tinyMCE.execCommand("mceAddUndoLevel");
+						e.preventDefault();
+						return false;
+					}
+				}
+
+				tinyMCE.selectedElement = null;
+				tinyMCE.selectedNode = null;
+				var elm = tinyMCE.selectedInstance.getFocusElement();
+				tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a");
+				tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img");
+				tinyMCE.selectedElement = elm;
+
+				// Update visualaids on tabs
+				if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9)
+					tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings['visual'], tinyMCE.selectedInstance);
+
+				// Fix empty elements on return/enter, check where enter occured
+				if (tinyMCE.isMSIE && e.type == "keydown" && e.keyCode == 13)
+					tinyMCE.enterKeyElement = tinyMCE.selectedInstance.getFocusElement();
+
+				// Fix empty elements on return/enter
+				if (tinyMCE.isMSIE && e.type == "keyup" && e.keyCode == 13) {
+					var elm = tinyMCE.enterKeyElement;
+					if (elm) {
+						var re = new RegExp('^HR|IMG|BR$','g'); // Skip these
+						var dre = new RegExp('^H[1-6]$','g'); // Add double on these
+
+						if (!elm.hasChildNodes() && !re.test(elm.nodeName)) {
+							if (dre.test(elm.nodeName))
+								elm.innerHTML = "&nbsp;&nbsp;";
+							else
+								elm.innerHTML = "&nbsp;";
+						}
+					}
+				}
+
+				// Check if it's a position key
+				var keys = tinyMCE.posKeyCodes;
+				var posKey = false;
+				for (var i=0; i<keys.length; i++) {
+					if (keys[i] == e.keyCode) {
+						posKey = true;
+						break;
+					}
+				}
+
+				// MSIE custom key handling
+				if (tinyMCE.isMSIE && tinyMCE.settings['custom_undo_redo']) {
+					var keys = new Array(8,46); // Backspace,Delete
+					for (var i=0; i<keys.length; i++) {
+						if (keys[i] == e.keyCode) {
+							if (e.type == "keyup")
+								tinyMCE.triggerNodeChange(false);
+						}
+					}
+				}
+
+				// If Ctrl key
+				if (e.keyCode == 17)
+					return true;
+
+				// Handle Undo/Redo when typing content
+
+				// Start typing (non position key)
+				if (!posKey && e.type == "keyup")
+					tinyMCE.execCommand("mceStartTyping");
+
+				// Store undo bookmark
+				if (e.type == "keydown" && (posKey || e.ctrlKey) && inst)
+					inst.undoBookmark = inst.selection.getBookmark();
+
+				// End typing (position key) or some Ctrl event
+				if (e.type == "keyup" && (posKey || e.ctrlKey))
+					tinyMCE.execCommand("mceEndTyping");
+
+				if (posKey && e.type == "keyup")
+					tinyMCE.triggerNodeChange(false);
+
+				if (tinyMCE.isMSIE && e.ctrlKey)
+					window.setTimeout('tinyMCE.triggerNodeChange(false);', 1);
+			break;
+
+			case "mousedown":
+			case "mouseup":
+			case "click":
+			case "focus":
+				tinyMCE.hideMenus();
+
+				if (tinyMCE.selectedInstance) {
+					tinyMCE.selectedInstance.switchSettings();
+					tinyMCE.selectedInstance.isFocused = true;
+				}
+
+				// Check instance event trigged on
+				var targetBody = tinyMCE.getParentElement(e.target, "body");
+				for (var instanceName in tinyMCE.instances) {
+					if (!tinyMCE.isInstance(tinyMCE.instances[instanceName]))
+						continue;
+
+					var inst = tinyMCE.instances[instanceName];
+
+					// Reset design mode if lost (on everything just in case)
+					inst.autoResetDesignMode();
+
+					if (inst.getBody() == targetBody) {
+						tinyMCE.selectedInstance = inst;
+						tinyMCE.selectedElement = e.target;
+						tinyMCE.linkElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
+						tinyMCE.imgElement = tinyMCE.getParentElement(tinyMCE.selectedElement, "img");
+						break;
+					}
+				}
+
+				// Add first bookmark location
+				if (!tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark)
+					tinyMCE.selectedInstance.undoRedo.undoLevels[0].bookmark = tinyMCE.selectedInstance.selection.getBookmark();
+
+				if (tinyMCE.isSafari) {
+					tinyMCE.selectedInstance.lastSafariSelection = tinyMCE.selectedInstance.selection.getBookmark();
+					tinyMCE.selectedInstance.lastSafariSelectedElement = tinyMCE.selectedElement;
+
+					var lnk = tinyMCE.getParentElement(tinyMCE.selectedElement, "a");
+
+					// Patch the darned link
+					if (lnk && e.type == "mousedown") {
+						lnk.setAttribute("mce_real_href", lnk.getAttribute("href"));
+						lnk.setAttribute("href", "javascript:void(0);");
+					}
+
+					// Patch back
+					if (lnk && e.type == "click") {
+						window.setTimeout(function() {
+							lnk.setAttribute("href", lnk.getAttribute("mce_real_href"));
+							lnk.removeAttribute("mce_real_href");
+						}, 10);
+					}
+				}
+
+				// Reset selected node
+				if (e.type != "focus")
+					tinyMCE.selectedNode = null;
+
+				tinyMCE.triggerNodeChange(false);
+				tinyMCE.execCommand("mceEndTyping");
+
+				if (e.type == "mouseup")
+					tinyMCE.execCommand("mceAddUndoLevel");
+
+				// Just in case
+				if (!tinyMCE.selectedInstance && e.target.editorId)
+					tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId];
+
+				return false;
+			break;
+		}
+	},
+
+	/**
+	 * Returns the HTML code for a normal button control.
+	 *
+	 * @param {string} id Button control id, this will be the suffix for the element id, the prefix is the editor id.
+	 * @param {string} lang Language variable key name to insert as the title/alt of the button image.
+	 * @param {string} img Image URL to insert, {$themeurl} and {$pluginurl} will be replaced.
+	 * @param {string} cmd Command to execute when the user clicks the button.
+	 * @param {string} ui Optional user interface boolean for command.
+	 * @param {string} val Optional value for command.
+	 * @return HTML code for a normal button based in input information.
+	 * @type string
+	 */
+	getButtonHTML : function(id, lang, img, cmd, ui, val) {
+		var h = '', m, x;
+
+		cmd = 'tinyMCE.execInstanceCommand(\'{$editor_id}\',\'' + cmd + '\'';
+
+		if (typeof(ui) != "undefined" && ui != null)
+			cmd += ',' + ui;
+
+		if (typeof(val) != "undefined" && val != null)
+			cmd += ",'" + val + "'";
+
+		cmd += ');';
+
+		// Use tilemaps when enabled and found and never in MSIE since it loads the tile each time from cache if cahce is disabled
+		if (tinyMCE.getParam('button_tile_map') && (!tinyMCE.isMSIE || tinyMCE.isOpera) && (m = this.buttonMap[id]) != null && (tinyMCE.getParam("language") == "en" || img.indexOf('$lang') == -1)) {
+			// Tiled button
+			x = 0 - (m * 20) == 0 ? '0' : 0 - (m * 20);
+			h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceTiledButton mceButtonNormal" target="_self">';
+			h += '<img src="{$themeurl}/images/spacer.gif" style="background-position: ' + x + 'px 0" title="{$' + lang + '}" />';
+			h += '</a>';
+		} else {
+			// Normal button
+			h += '<a id="{$editor_id}_' + id + '" href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceButtonNormal" target="_self">';
+			h += '<img src="' + img + '" title="{$' + lang + '}" />';
+			h += '</a>';
+		}
+
+		return h;
+	},
+
+	/**
+	 * Adds a list of buttons available in the tiled button image used by the button_tile_map option.
+	 *
+	 * @param {string} m Comma separated list of buttons that are available in tiled image.
+	 */
+	addButtonMap : function(m) {
+		var i, a = m.replace(/\s+/, '').split(',');
+
+		for (i=0; i<a.length; i++)
+			this.buttonMap[a[i]] = i;
+	},
+
+	/**
+	 * Piggyback onsubmit event handler function, this will remove/hide the TinyMCE specific form elements
+	 * call triggerSave to fill the textarea with the correct contents then call the old piggy backed event handler.
+	 */
+	submitPatch : function() {
+		tinyMCE.removeTinyMCEFormElements(this);
+		tinyMCE.triggerSave();
+		this.mceOldSubmit();
+		tinyMCE.isNotDirty = true;
+	},
+
+	/**
+	 * Gets executed when the page loads or get intitialized. This function will then convert all textareas/divs that
+	 * is to be converted into TinyMCE editor controls.
+	 *
+	 * @return true - if the event is to be chained, false - if the event chain is to be canceled.
+	 * @type boolean
+	 */
+	onLoad : function() {
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera && window.event.type == "readystatechange" && document.readyState != "complete")
+			return true;
+
+		if (tinyMCE.isLoaded)
+			return true;
+
+		tinyMCE.isLoaded = true;
+
+		tinyMCE.dispatchCallback(null, 'onpageload', 'onPageLoad');
+
+		for (var c=0; c<tinyMCE.configs.length; c++) {
+			tinyMCE.settings = tinyMCE.configs[c];
+
+			var selector = tinyMCE.getParam("editor_selector");
+			var deselector = tinyMCE.getParam("editor_deselector");
+			var elementRefAr = new Array();
+
+			// Add submit triggers
+			if (document.forms && tinyMCE.settings['add_form_submit_trigger'] && !tinyMCE.submitTriggers) {
+				for (var i=0; i<document.forms.length; i++) {
+					var form = document.forms[i];
+
+					tinyMCE.addEvent(form, "submit", TinyMCE_Engine.prototype.handleEvent);
+					tinyMCE.addEvent(form, "reset", TinyMCE_Engine.prototype.handleEvent);
+					tinyMCE.submitTriggers = true; // Do it only once
+
+					// Patch the form.submit function
+					if (tinyMCE.settings['submit_patch']) {
+						try {
+							form.mceOldSubmit = form.submit;
+							form.submit = TinyMCE_Engine.prototype.submitPatch;
+						} catch (e) {
+							// Do nothing
+						}
+					}
+				}
+			}
+
+			// Add editor instances based on mode
+			var mode = tinyMCE.settings['mode'];
+			switch (mode) {
+				case "exact":
+					var elements = tinyMCE.getParam('elements', '', true, ',');
+
+					for (var i=0; i<elements.length; i++) {
+						var element = tinyMCE._getElementById(elements[i]);
+						var trigger = element ? element.getAttribute(tinyMCE.settings['textarea_trigger']) : "";
+
+						if (tinyMCE.getAttrib(element, "class").indexOf(deselector) != -1)
+							continue;
+
+						if (trigger == "false")
+							continue;
+
+						if ((tinyMCE.settings['ask'] || tinyMCE.settings['convert_on_click']) && element) {
+							elementRefAr[elementRefAr.length] = element;
+							continue;
+						}
+
+						if (element)
+							tinyMCE.addMCEControl(element, elements[i]);
+						else if (tinyMCE.settings['debug'])
+							alert("Error: Could not find element by id or name: " + elements[i]);
+					}
+				break;
+
+				case "specific_textareas":
+				case "textareas":
+					var nodeList = document.getElementsByTagName("textarea");
+
+					for (var i=0; i<nodeList.length; i++) {
+						var elm = nodeList.item(i);
+						var trigger = elm.getAttribute(tinyMCE.settings['textarea_trigger']);
+
+						if (selector != '' && tinyMCE.getAttrib(elm, "class").indexOf(selector) == -1)
+							continue;
+
+						if (selector != '')
+							trigger = selector != "" ? "true" : "";
+
+						if (tinyMCE.getAttrib(elm, "class").indexOf(deselector) != -1)
+							continue;
+
+						if ((mode == "specific_textareas" && trigger == "true") || (mode == "textareas" && trigger != "false"))
+							elementRefAr[elementRefAr.length] = elm;
+					}
+				break;
+			}
+
+			for (var i=0; i<elementRefAr.length; i++) {
+				var element = elementRefAr[i];
+				var elementId = element.name ? element.name : element.id;
+
+				if (tinyMCE.settings['ask'] || tinyMCE.settings['convert_on_click']) {
+					// Focus breaks in Mozilla
+					if (tinyMCE.isGecko) {
+						var settings = tinyMCE.settings;
+
+						tinyMCE.addEvent(element, "focus", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
+
+						if (element.nodeName != "TEXTAREA" && element.nodeName != "INPUT")
+							tinyMCE.addEvent(element, "click", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
+						// tinyMCE.addEvent(element, "mouseover", function (e) {window.setTimeout(function() {TinyMCE_Engine.prototype.confirmAdd(e, settings);}, 10);});
+					} else {
+						var settings = tinyMCE.settings;
+
+						tinyMCE.addEvent(element, "focus", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
+						tinyMCE.addEvent(element, "click", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
+						// tinyMCE.addEvent(element, "mouseenter", function () { TinyMCE_Engine.prototype.confirmAdd(null, settings); });
+					}
+				} else
+					tinyMCE.addMCEControl(element, elementId);
+			}
+
+			// Handle auto focus
+			if (tinyMCE.settings['auto_focus']) {
+				window.setTimeout(function () {
+					var inst = tinyMCE.getInstanceById(tinyMCE.settings['auto_focus']);
+					inst.selection.selectNode(inst.getBody(), true, true);
+					inst.contentWindow.focus();
+				}, 10);
+			}
+
+			tinyMCE.dispatchCallback(null, 'oninit', 'onInit');
+		}
+	},
+
+	/**
+	 * Returns true/false if a specific object is a TinyMCE_Control instance or not.
+	 *
+	 * @param {object} o Object to check.
+	 * @return true/false if it's a control or not.
+	 * @type boolean
+	 */
+	isInstance : function(o) {
+		return o != null && typeof(o) == "object" && o.isTinyMCE_Control;
+	},
+
+	/**
+	 * Returns a specific configuration setting or the default value if it wasn't found.
+	 *
+	 * @param {string} name Configuration setting to get.
+	 * @param {string} default_value Default value to return if it wasn't found.
+	 * @param {boolean} strip_whitespace Optional remove all whitespace.
+	 * @param {string} split_chr Split char/regex/string.
+	 * @return Number, string or other object based in parameter and default_value.
+	 * @type object
+	 */
+	getParam : function(name, default_value, strip_whitespace, split_chr) {
+		var value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];
+
+		// Fix bool values
+		if (value == "true" || value == "false")
+			return (value == "true");
+
+		if (strip_whitespace)
+			value = tinyMCE.regexpReplace(value, "[ \t\r\n]", "");
+
+		if (typeof(split_chr) != "undefined" && split_chr != null) {
+			value = value.split(split_chr);
+			var outArray = new Array();
+
+			for (var i=0; i<value.length; i++) {
+				if (value[i] && value[i] != "")
+					outArray[outArray.length] = value[i];
+			}
+
+			value = outArray;
+		}
+
+		return value;
+	},
+
+	/**
+	 * Returns a language variable value from the language packs.
+	 *
+	 * @param {string} name Name of the key to retrive.
+	 * @param {string} default_value Optional default value to return if it wasn't found.
+	 * @param {boolean} parse_entities Is HTML entities to be resolved or not.
+	 * @param {Array} va Optional name/value array of variables to replace in language string.	 
+	 * @return Language string value could be a number if it's a relative dimenstion.
+	 * @type object
+	 */
+	getLang : function(name, default_value, parse_entities, va) {
+		var v = (typeof(tinyMCELang[name]) == "undefined") ? default_value : tinyMCELang[name], n;
+
+		if (parse_entities)
+			v = tinyMCE.entityDecode(v);
+
+		if (va) {
+			for (n in va)
+				v = this.replaceVar(v, n, va[n]);
+		}
+
+		return v;
+	},
+
+	/**
+	 * HTML entity decode a string, replaces &lt; with <.
+	 *
+	 * @param {string} s Entity string to decode into normal string.
+	 * @return Entity decoded string.
+	 * @type string
+	 */
+	entityDecode : function(s) {
+		var e = document.createElement("div");
+		e.innerHTML = s;
+		return e.innerHTML;
+	},
+
+	/**
+	 * Adds language items to the global language array.
+	 *
+	 * @param {string} prefix Prefix string to add infront of every array item before adding it.
+	 * @param {Array} ar Language item array to add to global language array.
+	 */
+	addToLang : function(prefix, ar) {
+		for (var key in ar) {
+			if (typeof(ar[key]) == 'function')
+				continue;
+
+			tinyMCELang[(key.indexOf('lang_') == -1 ? 'lang_' : '') + (prefix != '' ? (prefix + "_") : '') + key] = ar[key];
+		}
+
+	//	for (var key in ar)
+	//		tinyMCELang[(key.indexOf('lang_') == -1 ? 'lang_' : '') + (prefix != '' ? (prefix + "_") : '') + key] = "|" + ar[key] + "|";
+	},
+
+	/**
+	 * Triggers a nodeChange event to every theme and plugin. This will be executed when the cursor moves or
+	 * when a command that modifies the editor contents is executed.
+	 *
+	 * @param {boolean} focus Optional state if the last selected editor instance is to be focused or not.
+	 * @param {boolean} setup_content Optional state if it's called from setup content function or not.
+	 */
+	triggerNodeChange : function(focus, setup_content) {
+		if (tinyMCE.selectedInstance) {
+			var inst = tinyMCE.selectedInstance;
+			var editorId = inst.editorId;
+			var elm = (typeof(setup_content) != "undefined" && setup_content) ? tinyMCE.selectedElement : inst.getFocusElement();
+			var undoIndex = -1;
+			var undoLevels = -1;
+			var anySelection = false;
+			var selectedText = inst.selection.getSelectedText();
+
+			if (setup_content && tinyMCE.isGecko && inst.isHidden())
+				elm = inst.getBody();
+
+			inst.switchSettings();
+
+			if (tinyMCE.settings["auto_resize"]) {
+				var doc = inst.getDoc();
+
+				inst.iframeElement.style.width = doc.body.offsetWidth + "px";
+				inst.iframeElement.style.height = doc.body.offsetHeight + "px";
+			}
+
+			if (tinyMCE.selectedElement)
+				anySelection = (tinyMCE.selectedElement.nodeName.toLowerCase() == "img") || (selectedText && selectedText.length > 0);
+
+			if (tinyMCE.settings['custom_undo_redo']) {
+				undoIndex = inst.undoRedo.undoIndex;
+				undoLevels = inst.undoRedo.undoLevels.length;
+			}
+
+			tinyMCE.dispatchCallback(inst, 'handle_node_change_callback', 'handleNodeChange', editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection, setup_content);
+		}
+
+		if (this.selectedInstance && (typeof(focus) == "undefined" || focus))
+			this.selectedInstance.contentWindow.focus();
+	},
+
+	/**
+	 * Executes the custom cleanup functions on the specified content.
+	 *
+	 * @param {TinyMCE_Control} inst TinyMCE editor control instance.
+	 * @param {string} type Event type to call.
+	 * @param {object} content DOM element or string to pass to handlers depending on type.
+	 * @return string or DOM element depending on type.
+	 * @private
+	 */
+	_customCleanup : function(inst, type, content) {
+		var pl, po, i;
+
+		// Call custom cleanup
+		var customCleanup = tinyMCE.settings['cleanup_callback'];
+		if (customCleanup != "" && eval("typeof(" + customCleanup + ")") != "undefined")
+			content = eval(customCleanup + "(type, content, inst);");
+
+		// Trigger plugin cleanups
+		pl = inst.plugins;
+		for (i=0; i<pl.length; i++) {
+			po = tinyMCE.plugins[pl[i]];
+
+			if (po && po.cleanup)
+				content = po.cleanup(type, content, inst);
+		}
+
+		return content;
+	},
+
+	/**
+	 * Sets the HTML contents of the selected editor instance.
+	 *
+	 * @param {string} h HTML contents to set in the selected instance.
+	 * @deprecated
+	 */
+	setContent : function(h) {
+		if (tinyMCE.selectedInstance) {
+			tinyMCE.selectedInstance.execCommand('mceSetContent', false, h);
+			tinyMCE.selectedInstance.repaint();
+		}
+	},
+
+	/**
+	 * Loads a theme specific language pack.
+	 *
+	 * @param {string} name Optional name of the theme to load language pack from.
+	 */
+	importThemeLanguagePack : function(name) {
+		if (typeof(name) == "undefined")
+			name = tinyMCE.settings['theme'];
+
+		tinyMCE.loadScript(tinyMCE.baseURL + '/themes/' + name + '/langs/' + tinyMCE.settings['language'] + '.js');
+	},
+
+	/**
+	 * Loads a plugin specific language pack.
+	 *
+	 * @param {string} name Plugin name/id to load language pack for.
+	 * @param {string} valid_languages Comma separated list of valid languages for the plugin.
+	 */
+	importPluginLanguagePack : function(name, valid_languages) {
+		var lang = "en", b = tinyMCE.baseURL + '/plugins/' + name;
+
+		valid_languages = valid_languages.split(',');
+		for (var i=0; i<valid_languages.length; i++) {
+			if (tinyMCE.settings['language'] == valid_languages[i])
+				lang = tinyMCE.settings['language'];
+		}
+
+		if (this.plugins[name])
+			b = this.plugins[name].baseURL;
+
+		tinyMCE.loadScript(b + '/langs/' + lang +  '.js');
+	},
+
+	/**
+	 * Replaces language, args and settings variables in a HTML string.
+	 *
+	 * @param {string} h HTML string to replace language variables in.
+	 * @param {Array} as Optional arguments array to take variables from.
+	 * @return HTML string with replaced varliables.
+	 * @type string
+	 */
+	applyTemplate : function(h, as) {
+		var i, s, ar = h.match(new RegExp('\\{\\$[a-z0-9_]+\\}', 'gi'));
+
+		if (ar && ar.length > 0) {
+			for (i=ar.length-1; i>=0; i--) {
+				s = ar[i].substring(2, ar[i].length-1);
+
+				if (s.indexOf('lang_') == 0 && tinyMCELang[s])
+					h = tinyMCE.replaceVar(h, s, tinyMCELang[s]);
+				else if (as && as[s])
+					h = tinyMCE.replaceVar(h, s, as[s]);
+				else if (tinyMCE.settings[s])
+					h = tinyMCE.replaceVar(h, s, tinyMCE.settings[s]);
+			}
+		}
+
+		h = tinyMCE.replaceVar(h, "themeurl", tinyMCE.themeURL);
+
+		return h;
+	},
+
+	/**
+	 * Replaces a specific variable in the string with a nother string.
+	 *
+	 * @param {string} h String to search in for the variable.
+	 * @param {string} r Variable name to search for.
+	 * @param {string} v Value to insert where a variable is found.
+	 * @return String with replaced variable.
+	 * @type string
+	 */
+	replaceVar : function(h, r, v) {
+		return h.replace(new RegExp('{\\\$' + r + '}', 'g'), v);
+	},
+
+	/**
+	 * Opens a popup window based in the specified input data. This function
+	 * is used for all popup windows in TinyMCE.
+	 *
+	 * These are the current template keys: file, width, height, close_previous.
+	 *
+	 * @param {Array} template Popup template data such as with, height etc.
+	 * @param {Array} args Popup arguments that is to be passed to the popup such as custom data.
+	 */
+	openWindow : function(template, args) {
+		var html, width, height, x, y, resizable, scrollbars, url;
+
+		args['mce_template_file'] = template['file'];
+		args['mce_width'] = template['width'];
+		args['mce_height'] = template['height'];
+		tinyMCE.windowArgs = args;
+
+		html = template['html'];
+		if (!(width = parseInt(template['width'])))
+			width = 320;
+
+		if (!(height = parseInt(template['height'])))
+			height = 200;
+
+		// Add to height in M$ due to SP2 WHY DON'T YOU GUYS IMPLEMENT innerWidth of windows!!
+		if (tinyMCE.isMSIE)
+			height += 40;
+		else
+			height += 20;
+
+		x = parseInt(screen.width / 2.0) - (width / 2.0);
+		y = parseInt(screen.height / 2.0) - (height / 2.0);
+
+		resizable = (args && args['resizable']) ? args['resizable'] : "no";
+		scrollbars = (args && args['scrollbars']) ? args['scrollbars'] : "no";
+
+		if (template['file'].charAt(0) != '/' && template['file'].indexOf('://') == -1)
+			url = tinyMCE.baseURL + "/themes/" + tinyMCE.getParam("theme") + "/" + template['file'];
+		else
+			url = template['file'];
+
+		// Replace all args as variables in URL
+		for (var name in args) {
+			if (typeof(args[name]) == 'function')
+				continue;
+
+			url = tinyMCE.replaceVar(url, name, escape(args[name]));
+		}
+
+		if (html) {
+			html = tinyMCE.replaceVar(html, "css", this.settings['popups_css']);
+			html = tinyMCE.applyTemplate(html, args);
+
+			var win = window.open("", "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=yes,minimizable=" + resizable + ",modal=yes,width=" + width + ",height=" + height + ",resizable=" + resizable);
+			if (win == null) {
+				alert(tinyMCELang['lang_popup_blocked']);
+				return;
+			}
+
+			win.document.write(html);
+			win.document.close();
+			win.resizeTo(width, height);
+			win.focus();
+		} else {
+			if ((tinyMCE.isMSIE && !tinyMCE.isOpera) && resizable != 'yes' && tinyMCE.settings["dialog_type"] == "modal") {
+				height += 10;
+
+				var features = "resizable:" + resizable 
+					+ ";scroll:"
+					+ scrollbars + ";status:yes;center:yes;help:no;dialogWidth:"
+					+ width + "px;dialogHeight:" + height + "px;";
+
+				window.showModalDialog(url, window, features);
+			} else {
+				var modal = (resizable == "yes") ? "no" : "yes";
+
+				if (tinyMCE.isGecko && tinyMCE.isMac)
+					modal = "no";
+
+				if (template['close_previous'] != "no")
+					try {tinyMCE.lastWindow.close();} catch (ex) {}
+
+				var win = window.open(url, "mcePopup" + new Date().getTime(), "top=" + y + ",left=" + x + ",scrollbars=" + scrollbars + ",dialog=" + modal + ",minimizable=" + resizable + ",modal=" + modal + ",width=" + width + ",height=" + height + ",resizable=" + resizable);
+				if (win == null) {
+					alert(tinyMCELang['lang_popup_blocked']);
+					return;
+				}
+
+				if (template['close_previous'] != "no")
+					tinyMCE.lastWindow = win;
+
+				eval('try { win.resizeTo(width, height); } catch(e) { }');
+
+				// Make it bigger if statusbar is forced
+				if (tinyMCE.isGecko) {
+					if (win.document.defaultView.statusbar.visible)
+						win.resizeBy(0, tinyMCE.isMac ? 10 : 24);
+				}
+
+				win.focus();
+			}
+		}
+	},
+
+	/**
+	 * Closes the specified window. This function is deprecated and should be replaced with
+	 * tinyMCEPopup.close();.
+	 *
+	 * @param {DOMWindow} win Window reference to close.
+	 * @deprecated
+	 */
+	closeWindow : function(win) {
+		win.close();
+	},
+
+	/**
+	 * Returns the visual aid class string, this will add/remove the visual aid class.
+	 *
+	 * @param {string} class_name Class name value to add/remove visual aid classes from.
+	 * @param {boolean} state true/false if the classes should be added or removed.
+	 * @return New class value containing the visual aid classes or not.
+	 * @type string
+	 */
+	getVisualAidClass : function(class_name, state) {
+		var aidClass = tinyMCE.settings['visual_table_class'];
+
+		if (typeof(state) == "undefined")
+			state = tinyMCE.settings['visual'];
+
+		// Split
+		var classNames = new Array();
+		var ar = class_name.split(' ');
+		for (var i=0; i<ar.length; i++) {
+			if (ar[i] == aidClass)
+				ar[i] = "";
+
+			if (ar[i] != "")
+				classNames[classNames.length] = ar[i];
+		}
+
+		if (state)
+			classNames[classNames.length] = aidClass;
+
+		// Glue
+		var className = "";
+		for (var i=0; i<classNames.length; i++) {
+			if (i > 0)
+				className += " ";
+
+			className += classNames[i];
+		}
+
+		return className;
+	},
+
+	/**
+	 * Adds visual aid classes to all elements that need them recursive in the DOM tree.
+	 *
+	 * @param {HTMLElement} el HTML element to add visual aid classes to.
+	 * @param {boolean} deep Should they be added to all children aswell.
+	 * @param {boolean} state Should they be added or removed.
+	 * @param {TinyMCE_Control} inst TinyMCE editor control instance to add/remove them to/from.
+	 */
+	handleVisualAid : function(el, deep, state, inst, skip_dispatch) {
+		if (!el)
+			return;
+
+		if (!skip_dispatch)
+			tinyMCE.dispatchCallback(inst, 'handle_visual_aid_callback', 'handleVisualAid', el, deep, state, inst);
+
+		var tableElement = null;
+
+		switch (el.nodeName) {
+			case "TABLE":
+				var oldW = el.style.width;
+				var oldH = el.style.height;
+				var bo = tinyMCE.getAttrib(el, "border");
+
+				bo = bo == "" || bo == "0" ? true : false;
+
+				tinyMCE.setAttrib(el, "class", tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el, "class"), state && bo));
+
+				el.style.width = oldW;
+				el.style.height = oldH;
+
+				for (var y=0; y<el.rows.length; y++) {
+					for (var x=0; x<el.rows[y].cells.length; x++) {
+						var cn = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(el.rows[y].cells[x], "class"), state && bo);
+						tinyMCE.setAttrib(el.rows[y].cells[x], "class", cn);
+					}
+				}
+
+				break;
+
+			case "A":
+				var anchorName = tinyMCE.getAttrib(el, "name");
+
+				if (anchorName != '' && state) {
+					el.title = anchorName;
+					el.className = 'mceItemAnchor';
+				} else if (anchorName != '' && !state)
+					el.className = '';
+
+				break;
+		}
+
+		if (deep && el.hasChildNodes()) {
+			for (var i=0; i<el.childNodes.length; i++)
+				tinyMCE.handleVisualAid(el.childNodes[i], deep, state, inst, true);
+		}
+	},
+
+	/*
+	applyClassesToFonts : function(doc, size) {
+		var f = doc.getElementsByTagName("font");
+		for (var i=0; i<f.length; i++) {
+			var s = tinyMCE.getAttrib(f[i], "size");
+
+			if (s != "")
+				tinyMCE.setAttrib(f[i], 'class', "mceItemFont" + s);
+		}
+
+		if (typeof(size) != "undefined") {
+			var css = "";
+
+			for (var x=0; x<doc.styleSheets.length; x++) {
+				for (var i=0; i<doc.styleSheets[x].rules.length; i++) {
+					if (doc.styleSheets[x].rules[i].selectorText == '#mceSpanFonts .mceItemFont' + size) {
+						css = doc.styleSheets[x].rules[i].style.cssText;
+						break;
+					}
+				}
+
+				if (css != "")
+					break;
+			}
+
+			if (doc.styleSheets[0].rules[0].selectorText == "FONT")
+				doc.styleSheets[0].removeRule(0);
+
+			doc.styleSheets[0].addRule("FONT", css, 0);
+		}
+	},
+	*/
+
+	/**
+	 * Fixes a Gecko specific bug where href, src attribute values gets converted incorrectly
+	 * when inserted into editor. This function will replace all src, href with mce_tsrc and mce_thref
+	 * to keep the values from chaging when they get inserted.
+	 *
+	 * @param {boolean} m Mode state, true is to replace the src, href attributes to mce_tsrc and mce_thref.
+	 * @param {HTMLElement} e HTML element to replace them in. (Will be used if m is 0)
+	 * @param {string} h HTML code to replace them in. (Will be used if m is 1)
+	 * @return Converted string or the specified HTML value depending on mode.
+	 * @type string
+	 */
+	fixGeckoBaseHREFBug : function(m, e, h) {
+		var nl, i, a, n, xsrc, xhref, el;
+
+		if (tinyMCE.isGecko) {
+			if (m == 1) {
+				h = h.replace(/\ssrc=/gi, " mce_tsrc=");
+				h = h.replace(/\shref=/gi, " mce_thref=");
+
+				return h;
+			} else {
+				el = new Array('a','img','select','area','iframe','base','input','script','embed','object','link');
+
+				for (a=0; a<el.length; a++) {
+					n = e.getElementsByTagName(el[a]);
+
+					for (i=0; i<n.length; i++) {
+						xsrc = tinyMCE.getAttrib(n[i], "mce_tsrc");
+						xhref = tinyMCE.getAttrib(n[i], "mce_thref");
+
+						if (xsrc != "") {
+							try {
+								n[i].src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], xsrc);
+							} catch (e) {
+								// Ignore, Firefox cast exception if local file wasn't found
+							}
+
+							n[i].removeAttribute("mce_tsrc");
+						}
+
+						if (xhref != "") {
+							try {
+								n[i].href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], xhref);
+							} catch (e) {
+								// Ignore, Firefox cast exception if local file wasn't found
+							}
+
+							n[i].removeAttribute("mce_thref");
+						}
+					}
+				}
+
+				el = tinyMCE.selectNodes(e, function(n) {
+					if (n.nodeType == 3 || n.nodeType == 8) {
+						n.nodeValue = n.nodeValue.replace(/\smce_tsrc=/gi, " src=");
+						n.nodeValue = n.nodeValue.replace(/\smce_thref=/gi, " href=");
+					}
+
+					return false;
+				});
+			}
+		}
+
+		return h;
+	},
+
+	/**
+	 * Sets the HTML code of a specific document.
+	 * Todo: Try to merge/remove this one.
+	 *
+	 * @param {DOMDocument} doc DOM document to set the HTML code in.
+	 * @param {string} html_content HTML contents to set in DOM document.
+	 * @private
+	 */
+	_setHTML : function(doc, html_content) {
+		// Force closed anchors open
+		//html_content = html_content.replace(new RegExp('<a(.*?)/>', 'gi'), '<a$1></a>');
+
+		html_content = tinyMCE.cleanupHTMLCode(html_content);
+
+		// Try innerHTML if it fails use pasteHTML in MSIE
+		try {
+			tinyMCE.setInnerHTML(doc.body, html_content);
+		} catch (e) {
+			if (this.isMSIE)
+				doc.body.createTextRange().pasteHTML(html_content);
+		}
+
+		// Content duplication bug fix
+		if (tinyMCE.isMSIE && tinyMCE.settings['fix_content_duplication']) {
+			// Remove P elements in P elements
+			var paras = doc.getElementsByTagName("P");
+			for (var i=0; i<paras.length; i++) {
+				var node = paras[i];
+				while ((node = node.parentNode) != null) {
+					if (node.nodeName == "P")
+						node.outerHTML = node.innerHTML;
+				}
+			}
+
+			// Content duplication bug fix (Seems to be word crap)
+			var html = doc.body.innerHTML;
+/*
+			if (html.indexOf('="mso') != -1) {
+				for (var i=0; i<doc.body.all.length; i++) {
+					var el = doc.body.all[i];
+					el.removeAttribute("className","",0);
+					el.removeAttribute("style","",0);
+				}
+
+				html = doc.body.innerHTML;
+				html = tinyMCE.regexpReplace(html, "<o:p><\/o:p>", "<br />");
+				html = tinyMCE.regexpReplace(html, "<o:p>&nbsp;<\/o:p>", "");
+				html = tinyMCE.regexpReplace(html, "<st1:.*?>", "");
+				html = tinyMCE.regexpReplace(html, "<p><\/p>", "");
+				html = tinyMCE.regexpReplace(html, "<p><\/p>\r\n<p><\/p>", "");
+				html = tinyMCE.regexpReplace(html, "<p>&nbsp;<\/p>", "<br />");
+				html = tinyMCE.regexpReplace(html, "<p>\s*(<p>\s*)?", "<p>");
+				html = tinyMCE.regexpReplace(html, "<\/p>\s*(<\/p>\s*)?", "</p>");
+			}*/
+
+			// Always set the htmlText output
+			tinyMCE.setInnerHTML(doc.body, html);
+		}
+
+		tinyMCE.cleanupAnchors(doc);
+
+		if (tinyMCE.getParam("convert_fonts_to_spans"))
+			tinyMCE.convertSpansToFonts(doc);
+	},
+
+	/**
+	 * Returns the editor instance id of a specific form element.
+	 *
+	 * @param {string} form_element Form element name to get instance id for.
+	 * @return TinyMCE editor instance id or null if it wasn't found.
+	 * @type string
+	 */
+	getEditorId : function(form_element) {
+		var inst = this.getInstanceById(form_element);
+		if (!inst)
+			return null;
+
+		return inst.editorId;
+	},
+
+	/**
+	 * Returns a TinyMCE editor instance by the specified editor id or null if it wasn't found.
+	 *
+	 * @param {string} editor_id Editor id to get instance for.
+	 * @return TinyMCE editor control instance or null if it wasn't found.
+	 * @type TinyMCE_Control
+	 */
+	getInstanceById : function(editor_id) {
+		var inst = this.instances[editor_id];
+		if (!inst) {
+			for (var n in tinyMCE.instances) {
+				var instance = tinyMCE.instances[n];
+				if (!tinyMCE.isInstance(instance))
+					continue;
+
+				if (instance.formTargetElementId == editor_id) {
+					inst = instance;
+					break;
+				}
+			}
+		}
+
+		return inst;
+	},
+
+	/**
+	 * Queries a command value for a specific command on a specific editor instance.
+	 *
+	 * @param {string} editor_id Editor id to query command value on.
+	 * @param {string} command Command to query for.
+	 * @return Command value passed from browser.
+	 * @type object
+	 */
+	queryInstanceCommandValue : function(editor_id, command) {
+		var inst = tinyMCE.getInstanceById(editor_id);
+		if (inst)
+			return inst.queryCommandValue(command);
+
+		return false;
+	},
+
+	/**
+	 * Queries a command state for a specific command on a specific editor instance.
+	 *
+	 * @param {string} editor_id Editor id to query command state on.
+	 * @param {string} command Command to query for.
+	 * @return Command state passed from browser.
+	 * @type boolean
+	 */
+	queryInstanceCommandState : function(editor_id, command) {
+		var inst = tinyMCE.getInstanceById(editor_id);
+		if (inst)
+			return inst.queryCommandState(command);
+
+		return null;
+	},
+
+	/**
+	 * Sets the window argument to be passed to TinyMCE popup.
+	 *
+	 * @param {string} n Window argument name.
+	 * @param {string} v Window argument value.
+	 */
+	setWindowArg : function(n, v) {
+		this.windowArgs[n] = v;
+	},
+
+	/**
+	 * Returns the window argument to be passed to TinyMCE popup.
+	 * Use: tinyMCEPopup.getWindowArg instead.
+	 *
+	 * @param {string} n Window argument name.
+	 * @return Argument value or default value if it wasn't found.
+	 * @deprecated
+	 */
+	getWindowArg : function(n, d) {
+		return (typeof(this.windowArgs[n]) == "undefined") ? d : this.windowArgs[n];
+	},
+
+	/**
+	 * Returns a array of CSS classes that is available in a document.
+	 * Todo: Fix this one, it's so ugly. :)
+	 *
+	 * @param {string} editor_id Editor id to get CSS classes from.
+	 * @param {DOMDocument} doc DOM document to get the CSS classes from.
+	 * @return Array of CSS classes that is available in a document.
+	 * @type Array
+	 */
+	getCSSClasses : function(editor_id, doc) {
+		var output = new Array();
+
+		// Is cached, use that
+		if (typeof(tinyMCE.cssClasses) != "undefined")
+			return tinyMCE.cssClasses;
+
+		if (typeof(editor_id) == "undefined" && typeof(doc) == "undefined") {
+			var instance;
+
+			for (var instanceName in tinyMCE.instances) {
+				instance = tinyMCE.instances[instanceName];
+				if (!tinyMCE.isInstance(instance))
+					continue;
+
+				break;
+			}
+
+			doc = instance.getDoc();
+		}
+
+		if (typeof(doc) == "undefined") {
+			var instance = tinyMCE.getInstanceById(editor_id);
+			doc = instance.getDoc();
+		}
+
+		if (doc) {
+			var styles = doc.styleSheets;
+
+			if (styles && styles.length > 0) {
+				for (var x=0; x<styles.length; x++) {
+					var csses = null;
+
+					// Just ignore any errors
+					eval("try {var csses = tinyMCE.isMSIE ? doc.styleSheets(" + x + ").rules : styles[" + x + "].cssRules;} catch(e) {}");
+					if (!csses)
+						return new Array();
+
+					for (var i=0; i<csses.length; i++) {
+						var selectorText = csses[i].selectorText;
+
+						// Can be multiple rules per selector
+						if (selectorText) {
+							var rules = selectorText.split(',');
+							for (var c=0; c<rules.length; c++) {
+								var rule = rules[c];
+
+								// Strip spaces between selectors
+								while (rule.indexOf(' ') == 0)
+									rule = rule.substring(1);
+
+								// Invalid rule
+								if (rule.indexOf(' ') != -1 || rule.indexOf(':') != -1 || rule.indexOf('mceItem') != -1)
+									continue;
+
+								if (rule.indexOf(tinyMCE.settings['visual_table_class']) != -1 || rule.indexOf('mceEditable') != -1 || rule.indexOf('mceNonEditable') != -1)
+									continue;
+
+								// Is class rule
+								if (rule.indexOf('.') != -1) {
+									var cssClass = rule.substring(rule.indexOf('.') + 1);
+									var addClass = true;
+
+									for (var p=0; p<output.length && addClass; p++) {
+										if (output[p] == cssClass)
+											addClass = false;
+									}
+
+									if (addClass)
+										output[output.length] = cssClass;
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+
+		// Cache em
+		if (output.length > 0)
+			tinyMCE.cssClasses = output;
+
+		return output;
+	},
+
+	/**
+	 * Regexp replaces the contents of a string. Use normal replace instead.
+	 *
+	 * @param {string} in_str String to replace in.
+	 * @param {string} reg_exp Regexp to replace.
+	 * @param {string} replace_str String to replace with.
+	 * @param {string} in_str Optional regexp options like "gi".
+	 * @return Replaced string value.
+	 * @type string
+	 * @deprecated
+	 */
+	regexpReplace : function(in_str, reg_exp, replace_str, opts) {
+		if (in_str == null)
+			return in_str;
+
+		if (typeof(opts) == "undefined")
+			opts = 'g';
+
+		var re = new RegExp(reg_exp, opts);
+		return in_str.replace(re, replace_str);
+	},
+
+	/**
+	 * Removes all prefix, suffix whitespace of a string.
+	 *
+	 * @param {string} s String to replace whitespace in.
+	 * @return Replaced string value.
+	 * @type string
+	 */
+	trim : function(s) {
+		return s.replace(/^\s*|\s*$/g, "");
+	},
+
+	/**
+	 * Removes MSIE 5.5 specific event wrapper function form a event string.
+	 * This will also remove the event blocker if it's added in front of the event.
+	 *
+	 * @param {string} s String to replace event data in.
+	 * @return Replaced string value.
+	 * @type string
+	 */
+	cleanupEventStr : function(s) {
+		s = "" + s;
+		s = s.replace('function anonymous()\n{\n', '');
+		s = s.replace('\n}', '');
+		s = s.replace(/^return true;/gi, ''); // Remove event blocker
+
+		return s;
+	},
+
+	/**
+	 * Returns the HTML for the specified control this will loop through
+	 * the theme and all plugins inorder to find the control. The callback for each
+	 * theme and plugin is called getControlHTML.
+	 *
+	 * @param {string} c Control name/id to get HTML code for.
+	 * @return HTML code for the specified control or empty string if it wasn't found.
+	 * @type string
+	 */
+	getControlHTML : function(c) {
+		var i, l, n, o, v;
+
+		l = tinyMCE.plugins;
+		for (n in l) {
+			o = l[n];
+
+			if (o.getControlHTML && (v = o.getControlHTML(c)) != '')
+				return tinyMCE.replaceVar(v, "pluginurl", o.baseURL);
+		}
+
+		o = tinyMCE.themes[tinyMCE.settings['theme']];
+		if (o.getControlHTML && (v = o.getControlHTML(c)) != '')
+			return v;
+
+		return '';
+	},
+
+	/**
+	 * Evaluates the specified function and uses the array of arguments.
+	 *
+	 * @param {string} f Function reference to execute.
+	 * @param {int} idx Index in array to start grabbing arguments from.
+	 * @param {Array} a Array of function arguments.
+	 * @return Value returned from the evaluated function.
+	 * @type object
+	 */
+	evalFunc : function(f, idx, a) {
+		var s = '(', i;
+
+		for (i=idx; i<a.length; i++) {
+			s += 'a[' + i + ']';
+
+			if (i < a.length-1)
+				s += ',';
+		}
+
+		s += ');';
+
+		return eval("f" + s);
+	},
+
+	/**
+	 * Dispatches the specified callback on all options, plugins and themes. This will not
+	 * chain them, so all functions callbacks will be executed regardless if the return true/false.
+	 *
+	 * @param {TinyMCE_Control} i TinyMCE editor control instance to execute callback on.
+	 * @param {string} p TinyMCE callback parameter to execute.
+	 * @param {string} n Function name to execute.
+	 * @return true/false if they where dispatched.
+	 */
+	dispatchCallback : function(i, p, n) {
+		return this.callFunc(i, p, n, 0, this.dispatchCallback.arguments);
+	},
+
+	/**
+	 * Executes the specified callback on all options, plugins and themes. This will
+	 * chain them, so callback chain will be broken if one function returns false.
+	 *
+	 * @param {TinyMCE_Control} i TinyMCE editor control instance to execute callback on.
+	 * @param {string} p TinyMCE callback parameter to execute.
+	 * @param {string} n Function name to execute.
+	 * @return true/false if a callback was executed.
+	 */
+	executeCallback : function(i, p, n) {
+		return this.callFunc(i, p, n, 1, this.executeCallback.arguments);
+	},
+
+	/**
+	 * Executes the specified execcommand callback on all options, plugins and themes. This will
+	 * chain them, so callback chain will be broken if one function returns true.
+	 *
+	 * @param {TinyMCE_Control} i TinyMCE editor control instance to execute callback on.
+	 * @param {string} p TinyMCE callback parameter to execute.
+	 * @param {string} n Function name to execute.
+	 * @return true/false if a callback was executed.
+	 */
+	execCommandCallback : function(i, p, n) {
+		return this.callFunc(i, p, n, 2, this.execCommandCallback.arguments);
+	},
+
+	/**
+	 * Executes callback chain. Callback order: Option, Plugins, Themes.
+	 *
+	 * @param {TinyMCE_Control} ins TinyMCE editor control instance to execute callback on.
+	 * @param {string} p TinyMCE callback parameter name.
+	 * @param {string} n Function name to execute.
+	 * @param {int} m Execution mode value, 0 = no chain, 1 = event chain, 2 = execcommand chain.
+	 * @param {Array} a Array with function arguments.
+	 * @return true - if the callback was executed, false if it wasn't.
+	 * @type boolean
+	 */
+	callFunc : function(ins, p, n, m, a) {
+		var l, i, on, o, s, v;
+
+		s = m == 2;
+
+		l = tinyMCE.getParam(p, '');
+
+		if (l != '' && (v = tinyMCE.evalFunc(typeof(l) == "function" ? l : eval(l), 3, a)) == s && m > 0)
+			return true;
+
+		if (ins != null) {
+			for (i=0, l = ins.plugins; i<l.length; i++) {
+				o = tinyMCE.plugins[l[i]];
+
+				if (o[n] && (v = tinyMCE.evalFunc(o[n], 3, a)) == s && m > 0)
+					return true;
+			}
+		}
+
+		l = tinyMCE.themes;
+		for (on in l) {
+			o = l[on];
+
+			if (o[n] && (v = tinyMCE.evalFunc(o[n], 3, a)) == s && m > 0)
+				return true;
+		}
+
+		return false;
+	},
+
+	/**
+	 * Encodes the string to raw XML entities. This will only convert the most common ones.
+	 * For real entity encoding use the xmlEncode method of the Cleanup class.
+	 *
+	 * @param {string} s String to encode.
+	 * @return XML Encoded string.
+	 * @type string
+	 */
+	xmlEncode : function(s) {
+		s = "" + s;
+		s = s.replace(/&/g, '&amp;');
+		s = s.replace(new RegExp('"', 'g'), '&quot;');
+		s = s.replace(/\'/g, '&#39;'); // &apos; is not working in MSIE
+		s = s.replace(/</g, '&lt;');
+		s = s.replace(/>/g, '&gt;');
+
+		return s;
+	},
+
+	/**
+	 * Extends the specified prototype with new methods.
+	 *
+	 * @param {Object} p Prototype to extend with new methods.
+	 * @param {Object} np New prototype to extend the other one with.
+	 * @return Extended prototype array.
+	 * @type Object
+	 */
+	extend : function(p, np) {
+		var o = {};
+
+		o.parent = p;
+
+		for (n in p)
+			o[n] = p[n];
+
+		for (n in np)
+			o[n] = np[n];
+
+		return o;
+	},
+
+	/**
+	 * Hides any visible menu layers.
+	 *
+	 * @private
+	 */
+	hideMenus : function() {
+		var e = tinyMCE.lastSelectedMenuBtn;
+
+		if (tinyMCE.lastMenu) {
+			tinyMCE.lastMenu.hide();
+			tinyMCE.lastMenu = null;
+		}
+
+		if (e) {
+			tinyMCE.switchClass(e, tinyMCE.lastMenuBtnClass);
+			tinyMCE.lastSelectedMenuBtn = null;
+		}
+	},
+
+	/**
+	 * Splits a string by the specified delimiter and skips any empty items.
+	 *
+	 * @param {string} d Delimiter to split by.
+	 * @param {string} s String to split.
+	 * @return Array with chunks from string.
+	 * @type Array
+	 */
+	explode : function(d, s) {
+		var ar = s.split(d), oar = new Array(), i;
+	
+		for (i = 0; i<ar.length; i++) {
+			if (ar[i] != "")
+				oar[oar.length] = ar[i];
+		}
+	
+		return oar;
+	}
+};
+
+// Global instances
+var TinyMCE = TinyMCE_Engine; // Compatiblity with gzip compressors
+var tinyMCE = new TinyMCE_Engine();
+var tinyMCELang = {};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Event.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Event.class.js.html new file mode 100644 index 000000000..e6578872f --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Event.class.js.html @@ -0,0 +1,403 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Event.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Event.class.js'

+ +

+ +
+ + + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Event.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:30 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ *
+ * The contents of this file will be wrapped in a class later on.
+ */
+
+/**
+ * Sets the enabled/disabled state of build in events on the specific node.
+ * This function is needed since some events gets executed in WYSIWYG mode.
+ *
+ * @param {HTMLNode} node HTML node to enable/disable events on.
+ * @param {boolean} state true/false state if the events should be disabled or enabled.
+ * @private
+ */
+TinyMCE_Engine.prototype._setEventsEnabled = function(node, state) {
+	var events = new Array('onfocus','onblur','onclick','ondblclick',
+				'onmousedown','onmouseup','onmouseover','onmousemove',
+				'onmouseout','onkeypress','onkeydown','onkeydown','onkeyup');
+
+	var evs = tinyMCE.settings['event_elements'].split(',');
+	for (var y=0; y<evs.length; y++){
+		var elms = node.getElementsByTagName(evs[y]);
+		for (var i=0; i<elms.length; i++) {
+			var event = "";
+
+			for (var x=0; x<events.length; x++) {
+				if ((event = tinyMCE.getAttrib(elms[i], events[x])) != '') {
+					event = tinyMCE.cleanupEventStr("" + event);
+
+					if (!state)
+						event = "return true;" + event;
+					else
+						event = event.replace(/^return true;/gi, '');
+
+					elms[i].removeAttribute(events[x]);
+					elms[i].setAttribute(events[x], event);
+				}
+			}
+		}
+	}
+};
+
+/**
+ * Patch function for MSIE specific events, this one simply grabs the window.event object and
+ * passes it as a argument to the handleEvent function of the TinyMCE_Engine class.
+ *
+ * @param {string} editor_id Editor id to patch.
+ * @private
+ */
+TinyMCE_Engine.prototype._eventPatch = function(editor_id) {
+	var n, inst, win, e;
+
+	// Remove odd, error
+	if (typeof(tinyMCE) == "undefined")
+		return true;
+
+	try {
+		// Try selected instance first
+		if (tinyMCE.selectedInstance) {
+			win = tinyMCE.selectedInstance.getWin();
+
+			if (win && win.event) {
+				e = win.event;
+
+				if (!e.target)
+					e.target = e.srcElement;
+
+				TinyMCE_Engine.prototype.handleEvent(e);
+				return;
+			}
+		}
+
+		// Search for it
+		for (n in tinyMCE.instances) {
+			inst = tinyMCE.instances[n];
+
+			if (!tinyMCE.isInstance(inst))
+				continue;
+
+			tinyMCE.selectedInstance = inst;
+			win = inst.getWin();
+
+			if (win && win.event) {
+				e = win.event;
+
+				if (!e.target)
+					e.target = e.srcElement;
+
+				TinyMCE_Engine.prototype.handleEvent(e);
+				return;
+			}
+		}
+	} catch (ex) {
+		// Ignore error if iframe is pointing to external URL
+	}
+};
+
+/**
+ * Unload document event handler function. This function will be executed when the
+ * page is unloaded, this will automaticly move the current editor contents to the textarea element this enables
+ * the editor to restore it's state when the user presses the back button in the browser.
+ * This will execute the triggerSave function.
+ */
+TinyMCE_Engine.prototype.unloadHandler = function() {
+	tinyMCE.triggerSave(true, true);
+};
+
+/**
+ * Adds the handleEvent function to the specified editor instance.
+ *
+ * @param {inst} inst Editor control instance to add event handler to.
+ */
+TinyMCE_Engine.prototype.addEventHandlers = function(inst) {
+	var doc = inst.getDoc();
+
+	inst.switchSettings();
+
+	if (tinyMCE.isMSIE) {
+		tinyMCE.addEvent(doc, "keypress", TinyMCE_Engine.prototype._eventPatch);
+		tinyMCE.addEvent(doc, "keyup", TinyMCE_Engine.prototype._eventPatch);
+		tinyMCE.addEvent(doc, "keydown", TinyMCE_Engine.prototype._eventPatch);
+		tinyMCE.addEvent(doc, "mouseup", TinyMCE_Engine.prototype._eventPatch);
+		tinyMCE.addEvent(doc, "click", TinyMCE_Engine.prototype._eventPatch);
+	} else {
+		tinyMCE.addEvent(doc, "keypress", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "keydown", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "keyup", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "click", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "mouseup", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "mousedown", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "focus", tinyMCE.handleEvent);
+		tinyMCE.addEvent(doc, "blur", tinyMCE.handleEvent);
+
+		eval('try { doc.designMode = "On"; } catch(e) {}'); // Force designmode
+	}
+};
+
+/**
+ * Mouse move handler function, this will be executed each time
+ * the mouse is moved within a editor instance. This function stores away the current selection in MSIE
+ * this will then be used when a undo/redo level is added.
+ */
+TinyMCE_Engine.prototype.onMouseMove = function() {
+	var inst;
+
+	if (!tinyMCE.hasMouseMoved) {
+		inst = tinyMCE.selectedInstance;
+
+		// Workaround for bug #1437457 (Odd MSIE bug)
+		if (inst.isFocused) {
+			inst.undoBookmark = inst.selection.getBookmark();
+			tinyMCE.hasMouseMoved = true;
+		}
+	}
+
+//	tinyMCE.cancelEvent(inst.getWin().event);
+//	return false;
+};
+
+/**
+ * Cancels the specified event, this will disable the event from be passed to other listeners in event chain.
+ *
+ * @param {DOMEvent} e Event to cancel.
+ */
+TinyMCE_Engine.prototype.cancelEvent = function(e) {
+	if (tinyMCE.isMSIE) {
+		e.returnValue = false;
+		e.cancelBubble = true;
+	} else
+		e.preventDefault();
+};
+
+/**
+ * Adds a event handler function to the specified object.
+ *
+ * @param {HTMLElement} o Object to add event handler to.
+ * @param {string} n Event name to listen to for example "click".
+ * @param {function} h Function handler to execute when event occurs.
+ */
+TinyMCE_Engine.prototype.addEvent = function(o, n, h) {
+	if (o.attachEvent)
+		o.attachEvent("on" + n, h);
+	else
+		o.addEventListener(n, h, false);
+};
+
+/**
+ * Adds accessibility keydown handler to the specified select element.
+ *
+ * @param {DOMEvent} e Event that gets passed when the element is focused.
+ * @param {HTMLElement} s Select element that the keydown handler gets added to.
+ * @param {DOMWindow} w DOM window reference to add.
+ */
+TinyMCE_Engine.prototype.addSelectAccessibility = function(e, s, w) {
+	// Add event handlers 
+	if (!s._isAccessible) {
+		s.onkeydown = tinyMCE.accessibleEventHandler;
+		s.onblur = tinyMCE.accessibleEventHandler;
+		s._isAccessible = true;
+		s._win = w;
+	}
+
+	return false;
+};
+
+/**
+ * Accessibility handler that gets executed when the user hits a key in a select element.
+ * This handler trams the enter/return or space key and then executes the onchange event handler.
+ *
+ * @param {DOMEvent} e DOM event object instance.
+ */
+TinyMCE_Engine.prototype.accessibleEventHandler = function(e) {
+	var win = this._win;
+	e = tinyMCE.isMSIE ? win.event : e;
+	var elm = tinyMCE.isMSIE ? e.srcElement : e.target;
+
+	// Unpiggyback onchange on blur
+	if (e.type == "blur") {
+		if (elm.oldonchange) {
+			elm.onchange = elm.oldonchange;
+			elm.oldonchange = null;
+		}
+
+		return true;
+	}
+
+	// Piggyback onchange
+	if (elm.nodeName == "SELECT" && !elm.oldonchange) {
+		elm.oldonchange = elm.onchange;
+		elm.onchange = null;
+	}
+
+	// Execute onchange and remove piggyback
+	if (e.keyCode == 13 || e.keyCode == 32) {
+		elm.onchange = elm.oldonchange;
+		elm.onchange();
+		elm.oldonchange = null;
+
+		tinyMCE.cancelEvent(e);
+		return false;
+	}
+
+	return true;
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_ForceParagraphs.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_ForceParagraphs.class.js.html new file mode 100644 index 000000000..2ab32aa05 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_ForceParagraphs.class.js.html @@ -0,0 +1,460 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_ForceParagraphs.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_ForceParagraphs.class.js'

+ +

+ +
+ + + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_ForceParagraphs.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:30 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * Forces P tags on return/enter in Gecko browsers.
+ */
+var TinyMCE_ForceParagraphs = {
+	/**
+	 * Inserts a paragraph at the current cursor location.
+	 *
+	 * @param {TinyMCE_Control} inst TinyMCE editor control instance.
+	 * @param {DOMEvent} e DOM event object.
+	 * @return true on success or false if it fails.
+	 * @type boolean
+	 * @private
+	 */
+	_insertPara : function(inst, e) {
+		function isEmpty(para) {
+			function isEmptyHTML(html) {
+				return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == "";
+			}
+
+			// Check for images
+			if (para.getElementsByTagName("img").length > 0)
+				return false;
+
+			// Check for tables
+			if (para.getElementsByTagName("table").length > 0)
+				return false;
+
+			// Check for HRs
+			if (para.getElementsByTagName("hr").length > 0)
+				return false;
+
+			// Check all textnodes
+			var nodes = tinyMCE.getNodeTree(para, new Array(), 3);
+			for (var i=0; i<nodes.length; i++) {
+				if (!isEmptyHTML(nodes[i].nodeValue))
+					return false;
+			}
+
+			// No images, no tables, no hrs, no text content then it's empty
+			return true;
+		}
+
+		var doc = inst.getDoc();
+		var sel = inst.getSel();
+		var win = inst.contentWindow;
+		var rng = sel.getRangeAt(0);
+		var body = doc.body;
+		var rootElm = doc.documentElement;
+		var blockName = "P";
+
+	//	tinyMCE.debug(body.innerHTML);
+
+	//	debug(e.target, sel.anchorNode.nodeName, sel.focusNode.nodeName, rng.startContainer, rng.endContainer, rng.commonAncestorContainer, sel.anchorOffset, sel.focusOffset, rng.toString());
+
+		// Setup before range
+		var rngBefore = doc.createRange();
+		rngBefore.setStart(sel.anchorNode, sel.anchorOffset);
+		rngBefore.collapse(true);
+
+		// Setup after range
+		var rngAfter = doc.createRange();
+		rngAfter.setStart(sel.focusNode, sel.focusOffset);
+		rngAfter.collapse(true);
+
+		// Setup start/end points
+		var direct = rngBefore.compareBoundaryPoints(rngBefore.START_TO_END, rngAfter) < 0;
+		var startNode = direct ? sel.anchorNode : sel.focusNode;
+		var startOffset = direct ? sel.anchorOffset : sel.focusOffset;
+		var endNode = direct ? sel.focusNode : sel.anchorNode;
+		var endOffset = direct ? sel.focusOffset : sel.anchorOffset;
+
+		startNode = startNode.nodeName == "BODY" ? startNode.firstChild : startNode;
+		endNode = endNode.nodeName == "BODY" ? endNode.firstChild : endNode;
+
+		// tinyMCE.debug(startNode, endNode);
+
+		// Get block elements
+		var startBlock = tinyMCE.getParentBlockElement(startNode);
+		var endBlock = tinyMCE.getParentBlockElement(endNode);
+
+		// If absolute force paragraph generation within
+		if (startBlock && new RegExp('absolute|relative|static', 'gi').test(startBlock.style.position))
+			startBlock = null;
+
+		if (endBlock && new RegExp('absolute|relative|static', 'gi').test(endBlock.style.position))
+			endBlock = null;
+
+		// Use current block name
+		if (startBlock != null) {
+			blockName = startBlock.nodeName;
+
+			// Use P instead
+			if (blockName == "TD" || blockName == "TABLE" || (blockName == "DIV" && new RegExp('left|right', 'gi').test(startBlock.style.cssFloat)))
+				blockName = "P";
+		}
+
+		// Within a list use normal behaviour
+		if (tinyMCE.getParentElement(startBlock, "OL,UL") != null)
+			return false;
+
+		// Within a table create new paragraphs
+		if ((startBlock != null && startBlock.nodeName == "TABLE") || (endBlock != null && endBlock.nodeName == "TABLE"))
+			startBlock = endBlock = null;
+
+		// Setup new paragraphs
+		var paraBefore = (startBlock != null && startBlock.nodeName == blockName) ? startBlock.cloneNode(false) : doc.createElement(blockName);
+		var paraAfter = (endBlock != null && endBlock.nodeName == blockName) ? endBlock.cloneNode(false) : doc.createElement(blockName);
+
+		// Is header, then force paragraph under
+		if (/^(H[1-6])$/.test(blockName))
+			paraAfter = doc.createElement("p");
+
+		// Setup chop nodes
+		var startChop = startNode;
+		var endChop = endNode;
+
+		// Get startChop node
+		node = startChop;
+		do {
+			if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))
+				break;
+
+			startChop = node;
+		} while ((node = node.previousSibling ? node.previousSibling : node.parentNode));
+
+		// Get endChop node
+		node = endChop;
+		do {
+			if (node == body || node.nodeType == 9 || tinyMCE.isBlockElement(node))
+				break;
+
+			endChop = node;
+		} while ((node = node.nextSibling ? node.nextSibling : node.parentNode));
+
+		// Fix when only a image is within the TD
+		if (startChop.nodeName == "TD")
+			startChop = startChop.firstChild;
+
+		if (endChop.nodeName == "TD")
+			endChop = endChop.lastChild;
+
+		// If not in a block element
+		if (startBlock == null) {
+			// Delete selection
+			rng.deleteContents();
+			sel.removeAllRanges();
+
+			if (startChop != rootElm && endChop != rootElm) {
+				// Insert paragraph before
+				rngBefore = rng.cloneRange();
+
+				if (startChop == body)
+					rngBefore.setStart(startChop, 0);
+				else
+					rngBefore.setStartBefore(startChop);
+
+				paraBefore.appendChild(rngBefore.cloneContents());
+
+				// Insert paragraph after
+				if (endChop.parentNode.nodeName == blockName)
+					endChop = endChop.parentNode;
+
+				// If not after image
+				//if (rng.startContainer.nodeName != "BODY" && rng.endContainer.nodeName != "BODY")
+					rng.setEndAfter(endChop);
+
+				if (endChop.nodeName != "#text" && endChop.nodeName != "BODY")
+					rngBefore.setEndAfter(endChop);
+
+				var contents = rng.cloneContents();
+				if (contents.firstChild && (contents.firstChild.nodeName == blockName || contents.firstChild.nodeName == "BODY"))
+					paraAfter.innerHTML = contents.firstChild.innerHTML;
+				else
+					paraAfter.appendChild(contents);
+
+				// Check if it's a empty paragraph
+				if (isEmpty(paraBefore))
+					paraBefore.innerHTML = "&nbsp;";
+
+				// Check if it's a empty paragraph
+				if (isEmpty(paraAfter))
+					paraAfter.innerHTML = "&nbsp;";
+
+				// Delete old contents
+				rng.deleteContents();
+				rngAfter.deleteContents();
+				rngBefore.deleteContents();
+
+				// Insert new paragraphs
+				paraAfter.normalize();
+				rngBefore.insertNode(paraAfter);
+				paraBefore.normalize();
+				rngBefore.insertNode(paraBefore);
+
+				// tinyMCE.debug("1: ", paraBefore.innerHTML, paraAfter.innerHTML);
+			} else {
+				body.innerHTML = "<" + blockName + ">&nbsp;</" + blockName + "><" + blockName + ">&nbsp;</" + blockName + ">";
+				paraAfter = body.childNodes[1];
+			}
+
+			inst.selection.selectNode(paraAfter, true, true);
+
+			return true;
+		}
+
+		// Place first part within new paragraph
+		if (startChop.nodeName == blockName)
+			rngBefore.setStart(startChop, 0);
+		else
+			rngBefore.setStartBefore(startChop);
+
+		rngBefore.setEnd(startNode, startOffset);
+		paraBefore.appendChild(rngBefore.cloneContents());
+
+		// Place secound part within new paragraph
+		rngAfter.setEndAfter(endChop);
+		rngAfter.setStart(endNode, endOffset);
+		var contents = rngAfter.cloneContents();
+
+		if (contents.firstChild && contents.firstChild.nodeName == blockName) {
+	/*		var nodes = contents.firstChild.childNodes;
+			for (var i=0; i<nodes.length; i++) {
+				//tinyMCE.debug(nodes[i].nodeName);
+				if (nodes[i].nodeName != "BODY")
+					paraAfter.appendChild(nodes[i]);
+			}
+	*/
+			paraAfter.innerHTML = contents.firstChild.innerHTML;
+		} else
+			paraAfter.appendChild(contents);
+
+		// Check if it's a empty paragraph
+		if (isEmpty(paraBefore))
+			paraBefore.innerHTML = "&nbsp;";
+
+		// Check if it's a empty paragraph
+		if (isEmpty(paraAfter))
+			paraAfter.innerHTML = "&nbsp;";
+
+		// Create a range around everything
+		var rng = doc.createRange();
+
+		if (!startChop.previousSibling && startChop.parentNode.nodeName.toUpperCase() == blockName) {
+			rng.setStartBefore(startChop.parentNode);
+		} else {
+			if (rngBefore.startContainer.nodeName.toUpperCase() == blockName && rngBefore.startOffset == 0)
+				rng.setStartBefore(rngBefore.startContainer);
+			else
+				rng.setStart(rngBefore.startContainer, rngBefore.startOffset);
+		}
+
+		if (!endChop.nextSibling && endChop.parentNode.nodeName.toUpperCase() == blockName)
+			rng.setEndAfter(endChop.parentNode);
+		else
+			rng.setEnd(rngAfter.endContainer, rngAfter.endOffset);
+
+		// Delete all contents and insert new paragraphs
+		rng.deleteContents();
+		rng.insertNode(paraAfter);
+		rng.insertNode(paraBefore);
+		//tinyMCE.debug("2", paraBefore.innerHTML, paraAfter.innerHTML);
+
+		// Normalize
+		paraAfter.normalize();
+		paraBefore.normalize();
+
+		inst.selection.selectNode(paraAfter, true, true);
+
+		return true;
+	},
+
+	/**
+	 * Handles the backspace action in Gecko. This will remove the weird BR element
+	 * that gets generated when a user hits backspace in the beginning of a paragraph.
+	 *
+	 * @param {TinyMCE_Control} inst TinyMCE editor control instance.
+	 * @return true/false if the event should be canceled or not.
+	 * @type
+	 */
+	_handleBackSpace : function(inst) {
+		var r = inst.getRng(), sn = r.startContainer, nv, s = false;
+
+		if (sn && sn.nextSibling && sn.nextSibling.nodeName == "BR") {
+			nv = sn.nodeValue;
+
+			// Handle if a backspace is pressed after a space character #bug 1466054
+			if (nv != null && nv.length >= r.startOffset && nv.charAt(r.startOffset - 1) == ' ')
+				s = true;
+
+			// Only remove BRs if we are at the end of line #bug 1464152
+			if (nv != null && r.startOffset == nv.length)
+				sn.nextSibling.parentNode.removeChild(sn.nextSibling);
+		}
+
+		return s;
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Layer.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Layer.class.js.html new file mode 100644 index 000000000..e1798adc8 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Layer.class.js.html @@ -0,0 +1,455 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Layer.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Layer.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_Layer 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Layer.class.js.html,v $
+ * $Revision: 1.19 $
+ * $Date: 2006/04/14 20:00:30 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * Constructor for the TinyMCE Layer. This class enables you to construct
+ * floating layers that is visible on top of select input fields, flashes and iframes.
+ *
+ * @param {string} id Unique ID name for the layer.
+ * @param {boolean} bm Block mode, defaults to true.
+ */
+function TinyMCE_Layer(id, bm) {
+	this.id = id;
+	this.blockerElement = null;
+	this.events = false;
+	this.element = null;
+	this.blockMode = typeof(bm) != 'undefined' ? bm : true;
+	this.doc = document;
+};
+
+TinyMCE_Layer.prototype = {
+	/**
+	 * Moves the layer relative to the specified HTML element.
+	 *
+	 * @param {HTMLElement} re Element to move the layer relative to.
+	 * @param {string} p Position of the layer tl = top left, tr = top right, bl = bottom left, br = bottom right.
+	 */
+	moveRelativeTo : function(re, p) {
+		var rep = this.getAbsPosition(re);
+		var w = parseInt(re.offsetWidth);
+		var h = parseInt(re.offsetHeight);
+		var e = this.getElement();
+		var ew = parseInt(e.offsetWidth);
+		var eh = parseInt(e.offsetHeight);
+		var x, y;
+
+		switch (p) {
+			case "tl":
+				x = rep.absLeft;
+				y = rep.absTop;
+				break;
+
+			case "tr":
+				x = rep.absLeft + w;
+				y = rep.absTop;
+				break;
+
+			case "bl":
+				x = rep.absLeft;
+				y = rep.absTop + h;
+				break;
+
+			case "br":
+				x = rep.absLeft + w;
+				y = rep.absTop + h;
+				break;
+
+			case "cc":
+				x = rep.absLeft + (w / 2) - (ew / 2);
+				y = rep.absTop + (h / 2) - (eh / 2);
+				break;
+		}
+
+		this.moveTo(x, y);
+	},
+
+	/**
+	 * Moves the layer relative in pixels.
+	 *
+	 * @param {int} x Horizontal relative position in pixels.
+	 * @param {int} y Vertical relative position in pixels.
+	 */
+	moveBy : function(x, y) {
+		var e = this.getElement();
+		this.moveTo(parseInt(e.style.left) + x, parseInt(e.style.top) + y);
+	},
+
+	/**
+	 * Moves the layer absolute in pixels.
+	 *
+	 * @param {int} x Horizontal absolute position in pixels.
+	 * @param {int} y Vertical absolute position in pixels.
+	 */
+	moveTo : function(x, y) {
+		var e = this.getElement();
+
+		e.style.left = x + "px";
+		e.style.top = y + "px";
+
+		this.updateBlocker();
+	},
+
+	/**
+	 * Resizes the layer by the specified relative width and height.
+	 *
+	 * @param {int} w Relative width value.
+	 * @param {int} h Relative height value.
+	 */
+	resizeBy : function(w, h) {
+		var e = this.getElement();
+		this.resizeTo(parseInt(e.style.width) + w, parseInt(e.style.height) + h);
+	},
+
+	/**
+	 * Resizes the layer to the specified width and height.
+	 *
+	 * @param {int} w Width value.
+	 * @param {int} h Height value.
+	 */
+	resizeTo : function(w, h) {
+		var e = this.getElement();
+
+		if (w != null)
+			e.style.width = w + "px";
+
+		if (h != null)
+			e.style.height = h + "px";
+
+		this.updateBlocker();
+	},
+
+	/**
+	 * Shows the layer.
+	 */
+	show : function() {
+		this.getElement().style.display = 'block';
+		this.updateBlocker();
+	},
+
+	/**
+	 * Hides the layer.
+	 */
+	hide : function() {
+		this.getElement().style.display = 'none';
+		this.updateBlocker();
+	},
+
+	/**
+	 * Returns true/false if the layer is visible or not.
+	 *
+	 * @return true/false if it's visible or not.
+	 * @type boolean
+	 */
+	isVisible : function() {
+		return this.getElement().style.display == 'block';
+	},
+
+	/**
+	 * Returns the DOM element that the layer is binded to.
+	 *
+	 * @return DOM HTML element.
+	 * @type HTMLElement
+	 */
+	getElement : function() {
+		if (!this.element)
+			this.element = this.doc.getElementById(this.id);
+
+		return this.element;
+	},
+
+	/**
+	 * Sets the block mode. If you set this property to true a control box blocker iframe
+	 * will be added to the document since MSIE has a issue where select boxes are visible
+	 * through layers.
+	 *
+	 * @param {boolean} s Block mode state, true is the default value.
+	 */
+	setBlockMode : function(s) {
+		this.blockMode = s;
+	},
+
+	/**
+	 * Updates the select/iframe/flash blocker this will also block the caret in Firefox.
+	 */
+	updateBlocker : function() {
+		var e, b, x, y, w, h;
+
+		b = this.getBlocker();
+		if (b) {
+			if (this.blockMode) {
+				e = this.getElement();
+				x = this.parseInt(e.style.left);
+				y = this.parseInt(e.style.top);
+				w = this.parseInt(e.offsetWidth);
+				h = this.parseInt(e.offsetHeight);
+
+				b.style.left = x + 'px';
+				b.style.top = y + 'px';
+				b.style.width = w + 'px';
+				b.style.height = h + 'px';
+				b.style.display = e.style.display;
+			} else
+				b.style.display = 'none';
+		}
+	},
+
+	/**
+	 * Returns the blocker DOM element, this is a invisible iframe.
+	 *
+	 * @return DOM HTML element.
+	 * @type HTMLElement
+	 */
+	getBlocker : function() {
+		var d, b;
+
+		if (!this.blockerElement && this.blockMode) {
+			d = this.doc;
+			b = d.createElement("iframe");
+
+			b.style.cssText = 'display: none; position: absolute; left: 0; top: 0';
+			b.src = 'javascript:false;';
+			b.frameBorder = '0';
+			b.scrolling = 'no';
+
+			d.body.appendChild(b);
+			this.blockerElement = b;
+		}
+
+		return this.blockerElement;
+	},
+
+	/**
+	 * Returns the absolute x, y cordinate of the specified node.
+	 *
+	 * @param {DOMElement} n DOM node to retrive x, y of.
+	 * @return Object containing absLeft and absTop properties.
+	 * @type Object
+	 */
+	getAbsPosition : function(n) {
+		var p = {absLeft : 0, absTop : 0};
+
+		while (n) {
+			p.absLeft += n.offsetLeft;
+			p.absTop += n.offsetTop;
+			n = n.offsetParent;
+		}
+
+		return p;
+	},
+
+	/**
+	 * Creates a element for the layer based on the id and specified name.
+	 *
+	 * @param {string} n Element tag name, like div.
+	 * @param {string} c Optional class name to set as class attribute value.
+	 * @param {HTMLElement} p Optional parent element reference, defaults to body.
+	 * @return HTML DOM element that got created.
+	 * @type HTMLElement
+	 */
+	create : function(n, c, p) {
+		var d = this.doc, e = d.createElement(n);
+
+		e.setAttribute('id', this.id);
+
+		if (c)
+			e.className = c;
+
+		if (!p)
+			p = d.body;
+
+		p.appendChild(e);
+
+		return this.element = e;
+	},
+
+	/**
+	 * Parses a int value this method will return 0 if the string is empty.
+	 *
+	 * @param {string} s String to parse value of.
+	 * @return Parsed number.
+	 * @type int
+	 */
+	parseInt : function(s) {
+		if (s == null || s == '')
+			return 0;
+
+		return parseInt(s);
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Menu.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Menu.class.js.html new file mode 100644 index 000000000..cc23ba3b6 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Menu.class.js.html @@ -0,0 +1,361 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Menu.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Menu.class.js'

+ +

+ +
+ + + + + + + + + + + + + + + + + + +
+ + Method Summary + +
+ + static void + + + + + TinyMCE_Menu() + +
+            + Constructor for the menu layer class. +
+

+ + + + +

/**
+ * $RCSfile: overview-summary-TinyMCE_Menu.class.js.html,v $
+ * $Revision: 1.15 $
+ * $Date: 2006/04/14 20:00:30 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * Constructor for the menu layer class.
+ */
+function TinyMCE_Menu() {
+	var id;
+
+	if (typeof(tinyMCE.menuCounter) == "undefined")
+		tinyMCE.menuCounter = 0;
+
+	id = "mc_menu_" + tinyMCE.menuCounter++;
+
+	TinyMCE_Layer.call(this, id, true);
+
+	this.id = id;
+	this.items = new Array();
+	this.needsUpdate = true;
+};
+
+// Extends the TinyMCE_Layer class
+TinyMCE_Menu.prototype = tinyMCE.extend(TinyMCE_Layer.prototype, {
+	/**
+	 * Initializes the Menu with settings. This will also create the menu
+	 * as a DIV element if it doesn't exists in the DOM.
+	 *
+	 * @param {Array} s Name/Value array with settings.
+	 */
+	init : function(s) {
+		var n;
+
+		// Default params
+		this.settings = {
+			separator_class : 'mceMenuSeparator',
+			title_class : 'mceMenuTitle',
+			disabled_class : 'mceMenuDisabled',
+			menu_class : 'mceMenu',
+			drop_menu : true
+		};
+
+		for (n in s)
+			this.settings[n] = s[n];
+
+		this.create('div', this.settings.menu_class);
+	},
+
+	/**
+	 * Clears the menu.
+	 */
+	clear : function() {
+		this.items = new Array();
+	},
+
+	/**
+	 * Adds a menu title, this is a static item that can't be clicked.
+	 *
+	 * @param {string} t Text to add to title.
+	 */
+	addTitle : function(t) {
+		this.add({type : 'title', text : t});
+	},
+
+	/**
+	 * Adds a disabled menu item, this is a static item that can't be clicked.
+	 *
+	 * @param {string} t Text to add to title.
+	 */
+	addDisabled : function(t) {
+		this.add({type : 'disabled', text : t});
+	},
+
+	/**
+	 * Adds a menu separator line.
+	 */
+	addSeparator : function() {
+		this.add({type : 'separator'});
+	},
+
+	/**
+	 * Adds a menu item.
+	 *
+	 * @param {string} t Menu item text.
+	 * @param {string} js JS string to evaluate on click.
+	 */
+	addItem : function(t, js) {
+		this.add({text : t, js : js});
+	},
+
+	/**
+	 * Adds a menu item object.
+	 *
+	 * @param {Object} mi Menu item object to add.
+	 */
+	add : function(mi) {
+		this.items[this.items.length] = mi;
+		this.needsUpdate = true;
+	},
+
+	/**
+	 * Update the menu with new HTML contents.
+	 */
+	update : function() {
+		var e = this.getElement(), h = '', i, t, m = this.items, s = this.settings;
+
+		if (this.settings.drop_menu)
+			h += '<span class="mceMenuLine"></span>';
+
+		h += '<table border="0" cellpadding="0" cellspacing="0">';
+
+		for (i=0; i<m.length; i++) {
+			t = tinyMCE.xmlEncode(m[i].text);
+			c = m[i].class_name ? ' class="' + m[i].class_name + '"' : '';
+
+			switch (m[i].type) {
+				case 'separator':
+					h += '<tr class="' + s.separator_class + '"><td>';
+					break;
+
+				case 'title':
+					h += '<tr class="' + s.title_class + '"><td><span' + c +'>' + t + '</span>';
+					break;
+
+				case 'disabled':
+					h += '<tr class="' + s.disabled_class + '"><td><span' + c +'>' + t + '</span>';
+					break;
+
+				default:
+					h += '<tr><td><a href="javascript:void(0);" onmousedown="' + tinyMCE.xmlEncode(m[i].js) + ';return false;"><span' + c +'>' + t + '</span></a>';
+			}
+
+			h += '</td></tr>';
+		}
+
+		h += '</table>';
+
+		e.innerHTML = h;
+
+		this.needsUpdate = false;
+		this.updateBlocker();
+	},
+
+	/**
+	 * Displays the menu. This function will automaticly hide any previously visible menus.
+	 */
+	show : function() {
+		var nl, i;
+
+		if (tinyMCE.lastMenu == this)
+			return;
+
+		if (this.needsUpdate)
+			this.update();
+
+		if (tinyMCE.lastMenu && tinyMCE.lastMenu != this)
+			tinyMCE.lastMenu.hide();
+
+		TinyMCE_Layer.prototype.show.call(this);
+
+		if (!tinyMCE.isOpera) {
+			// Accessibility stuff
+/*			nl = this.getElement().getElementsByTagName("a");
+			if (nl.length > 0)
+				nl[0].focus();*/
+		}
+
+		tinyMCE.lastMenu = this;
+	}
+});
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Popup.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Popup.class.js.html new file mode 100644 index 000000000..dcbfad14d --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Popup.class.js.html @@ -0,0 +1,511 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Popup.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Popup.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_Popup 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Popup.class.js.html,v $
+ * $Revision: 1.24 $
+ * $Date: 2006/04/14 20:00:30 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+// Some global instances, this will be filled later
+var tinyMCE = null, tinyMCELang = null;
+
+/**
+ * Constructor for the popup class. This class contains base logic for popup/dialogs and sets up
+ * object references to the TinyMCE core.
+ */
+function TinyMCE_Popup() {
+};
+
+/**
+ * Initializes the TinyMCE Popup class. This will setup the TinyMCE core references and other popup/dialog related functions.
+ */
+TinyMCE_Popup.prototype.init = function() {
+	var win = window.opener ? window.opener : window.dialogArguments;
+	var inst;
+
+	if (!win) {
+		// Try parent
+		win = parent.parent;
+
+		// Try top
+		if (typeof(win.tinyMCE) == "undefined")
+			win = top;
+	}
+
+	window.opener = win;
+	this.windowOpener = win;
+	this.onLoadEval = "";
+
+	// Setup parent references
+	tinyMCE = win.tinyMCE;
+	tinyMCELang = win.tinyMCELang;
+
+	if (!tinyMCE) {
+		alert("tinyMCE object reference not found from popup.");
+		return;
+	}
+
+	inst = tinyMCE.selectedInstance;
+	this.isWindow = tinyMCE.getWindowArg('mce_inside_iframe', false) == false;
+	this.storeSelection = (tinyMCE.isMSIE && !tinyMCE.isOpera) && !this.isWindow && tinyMCE.getWindowArg('mce_store_selection', true);
+
+	if (this.isWindow)
+		window.focus();
+
+	// Store selection
+	if (this.storeSelection)
+		inst.selectionBookmark = inst.selection.getBookmark(true);
+
+	// Setup dir
+	if (tinyMCELang['lang_dir'])
+		document.dir = tinyMCELang['lang_dir'];
+
+	// Setup title
+	var re = new RegExp('{|\\\$|}', 'g');
+	var title = document.title.replace(re, "");
+	if (typeof tinyMCELang[title] != "undefined") {
+		var divElm = document.createElement("div");
+		divElm.innerHTML = tinyMCELang[title];
+		document.title = divElm.innerHTML;
+
+		if (tinyMCE.setWindowTitle != null)
+			tinyMCE.setWindowTitle(window, divElm.innerHTML);
+	}
+
+	// Output Popup CSS class
+	document.write('<link href="' + tinyMCE.getParam("popups_css") + '" rel="stylesheet" type="text/css">');
+
+	tinyMCE.addEvent(window, "load", this.onLoad);
+};
+
+/**
+ * Gets executed when the window has finished loading it's contents. This function will then
+ * replace language variables with their real values.
+ */
+TinyMCE_Popup.prototype.onLoad = function() {
+	var dir, i, elms, body = document.body;
+
+	if (tinyMCE.getWindowArg('mce_replacevariables', true))
+		body.innerHTML = tinyMCE.applyTemplate(body.innerHTML, tinyMCE.windowArgs);
+
+	dir = tinyMCE.selectedInstance.settings['directionality'];
+	if (dir == "rtl" && document.forms && document.forms.length > 0) {
+		elms = document.forms[0].elements;
+		for (i=0; i<elms.length; i++) {
+			if ((elms[i].type == "text" || elms[i].type == "textarea") && elms[i].getAttribute("dir") != "ltr")
+				elms[i].dir = dir;
+		}
+	}
+
+	if (body.style.display == 'none')
+		body.style.display = 'block';
+
+	// Execute real onload (Opera fix)
+	if (tinyMCEPopup.onLoadEval != "")
+		eval(tinyMCEPopup.onLoadEval);
+};
+
+/**
+ * Executes the specified string onload. This is a workaround for Opera since it
+ * doesn't execute the events in the same order than MSIE and Firefox.
+ *
+ * @param {string} str String to evaluate on load.
+ */
+TinyMCE_Popup.prototype.executeOnLoad = function(str) {
+	if (tinyMCE.isOpera)
+		this.onLoadEval = str;
+	else
+		eval(str);
+};
+
+/**
+ * Resizes the current window to it's inner body size. This function
+ * was needed since MSIE makes the visible dialog area diffrent depending
+ * on what Theme/Skin you use.
+ */
+TinyMCE_Popup.prototype.resizeToInnerSize = function() {
+	// Netscape 7.1 workaround
+	if (this.isWindow && tinyMCE.isNS71) {
+		window.resizeBy(0, 10);
+		return;
+	}
+
+	if (this.isWindow) {
+		var doc = document;
+		var body = doc.body;
+		var oldMargin, wrapper, iframe, nodes, dx, dy;
+
+		if (body.style.display == 'none')
+			body.style.display = 'block';
+
+		// Remove margin
+		oldMargin = body.style.margin;
+		body.style.margin = '0';
+
+		// Create wrapper
+		wrapper = doc.createElement("div");
+		wrapper.id = 'mcBodyWrapper';
+		wrapper.style.display = 'none';
+		wrapper.style.margin = '0';
+
+		// Wrap body elements
+		nodes = doc.body.childNodes;
+		for (var i=nodes.length-1; i>=0; i--) {
+			if (wrapper.hasChildNodes())
+				wrapper.insertBefore(nodes[i].cloneNode(true), wrapper.firstChild);
+			else
+				wrapper.appendChild(nodes[i].cloneNode(true));
+
+			nodes[i].parentNode.removeChild(nodes[i]);
+		}
+
+		// Add wrapper
+		doc.body.appendChild(wrapper);
+
+		// Create iframe
+		iframe = document.createElement("iframe");
+		iframe.id = "mcWinIframe";
+		iframe.src = document.location.href.toLowerCase().indexOf('https') == -1 ? "about:blank" : tinyMCE.settings['default_document'];
+		iframe.width = "100%";
+		iframe.height = "100%";
+		iframe.style.margin = '0';
+
+		// Add iframe
+		doc.body.appendChild(iframe);
+
+		// Measure iframe
+		iframe = document.getElementById('mcWinIframe');
+		dx = tinyMCE.getWindowArg('mce_width') - iframe.clientWidth;
+		dy = tinyMCE.getWindowArg('mce_height') - iframe.clientHeight;
+
+		// Resize window
+		// tinyMCE.debug(tinyMCE.getWindowArg('mce_width') + "," + tinyMCE.getWindowArg('mce_height') + " - " + dx + "," + dy);
+		window.resizeBy(dx, dy);
+
+		// Hide iframe and show wrapper
+		body.style.margin = oldMargin;
+		iframe.style.display = 'none';
+		wrapper.style.display = 'block';
+	}
+};
+
+/**
+ * Resizes the current window to the dimensions of the body.
+ */
+TinyMCE_Popup.prototype.resizeToContent = function() {
+	var isMSIE = (navigator.appName == "Microsoft Internet Explorer");
+	var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
+
+	if (isOpera)
+		return;
+
+	if (isMSIE) {
+		try { window.resizeTo(10, 10); } catch (e) {}
+
+		var elm = document.body;
+		var width = elm.offsetWidth;
+		var height = elm.offsetHeight;
+		var dx = (elm.scrollWidth - width) + 4;
+		var dy = elm.scrollHeight - height;
+
+		try { window.resizeBy(dx, dy); } catch (e) {}
+	} else {
+		window.scrollBy(1000, 1000);
+		if (window.scrollX > 0 || window.scrollY > 0) {
+			window.resizeBy(window.innerWidth * 2, window.innerHeight * 2);
+			window.sizeToContent();
+			window.scrollTo(0, 0);
+			var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0);
+			var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0);
+			window.moveTo(x, y);
+		}
+	}
+};
+
+/**
+ * Returns a window argument, window arguments can be passed from a plugin to a window
+ * by using the tinyMCE.openWindow function.
+ *
+ * @param {string} name Argument name to retrive.
+ * @param {string} default_value Optional default value to assign if the argument wasn't set.
+ * @return Argument value object.
+ * @type Object
+ */
+TinyMCE_Popup.prototype.getWindowArg = function(name, default_value) {
+	return tinyMCE.getWindowArg(name, default_value);
+};
+
+/**
+ * Restores the selection back to the one stored after executing a command.
+ * This function was needed in MSIE when using inlinepopups, the selection
+ * would otherwice get lost if the user focused another field.
+ */
+TinyMCE_Popup.prototype.restoreSelection = function() {
+	if (this.storeSelection) {
+		var inst = tinyMCE.selectedInstance;
+
+		inst.getWin().focus();
+
+		if (inst.selectionBookmark)
+			inst.selection.moveToBookmark(inst.selectionBookmark);
+	}
+};
+
+/**
+ * Executes the specific command on the parent instance that opened the window. This method
+ * will also take care of the storage and restorage of the current selection in MSIE when
+ * using inlinepopups. So we suggest using this method instead of tinyMCE.execCommand when using
+ * popup windows.
+ *
+ * @param {string} command Command name to execute, for example mceLink or Bold.
+ * @param {boolean} user_interface True/false state if a UI (dialog) should be presented or not.
+ * @param {mixed} value Optional command value, this can be anything.
+ */
+TinyMCE_Popup.prototype.execCommand = function(command, user_interface, value) {
+	var inst = tinyMCE.selectedInstance;
+
+	this.restoreSelection();
+	inst.execCommand(command, user_interface, value);
+
+	// Store selection
+	if (this.storeSelection)
+		inst.selectionBookmark = inst.selection.getBookmark(true);
+};
+
+/**
+ * Closes the current window. This should be used instead of window.close. Since this will
+ * also handle inlinepopups closing.
+ */
+TinyMCE_Popup.prototype.close = function() {
+	tinyMCE.closeWindow(window);
+};
+
+/**
+ * Executes a color picker on the specified element id. When the user
+ * then selects a color it will be set as the value of the specified element.
+ *
+ * @param {DOMEvent} e DOM event object.
+ * @param {string} element_id Element id to be filled with the color value from the picker.
+ */
+TinyMCE_Popup.prototype.pickColor = function(e, element_id) {
+	tinyMCE.selectedInstance.execCommand('mceColorPicker', true, {
+		element_id : element_id,
+		document : document,
+		window : window,
+		store_selection : false
+	});
+};
+
+/**
+ * Opens a filebrowser/imagebrowser this will set the output value from
+ * the browser as a value on the specified element.
+ *
+ * @param {string} element_id Id of the element to set value in.
+ * @param {string} type Type of browser to open image/file/flash.
+ * @param {string} option Option name to get the file_broswer_callback function name from.
+ */
+TinyMCE_Popup.prototype.openBrowser = function(element_id, type, option) {
+	var cb = tinyMCE.getParam(option, tinyMCE.getParam("file_browser_callback"));
+	var url = document.getElementById(element_id).value;
+
+	tinyMCE.setWindowArg("window", window);
+	tinyMCE.setWindowArg("document", document);
+
+	// Call to external callback
+	if (eval('typeof(tinyMCEPopup.windowOpener.' + cb + ')') == "undefined")
+		alert("Callback function: " + cb + " could not be found.");
+	else
+		eval("tinyMCEPopup.windowOpener." + cb + "(element_id, url, type, window);");
+};
+
+/**
+ * Imports the specified class into the current popup. This will setup a local class definition
+ * by importing from the parent window.
+ *
+ * @param {string} c Class name to import to current page.
+ */
+TinyMCE_Popup.prototype.importClass = function(c) {
+	window[c] = function() {};
+
+	for (var n in window.opener[c].prototype)
+		window[c].prototype[n] = window.opener[c].prototype[n];
+
+	window[c].constructor = window.opener[c].constructor;
+};
+
+// Setup global instance
+var tinyMCEPopup = new TinyMCE_Popup();
+
+tinyMCEPopup.init();
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Selection.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Selection.class.js.html new file mode 100644 index 000000000..b5d061731 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_Selection.class.js.html @@ -0,0 +1,646 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_Selection.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_Selection.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_Selection 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_Selection.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:31 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * Constructs a Selection instance and binds it to the specificed TinyMCE editor control.
+ *
+ * @param {TinyMCE_Control} inst TinyMCE editor control instance.
+ * @constructor
+ */
+function TinyMCE_Selection(inst) {
+	this.instance = inst;
+};
+
+TinyMCE_Selection.prototype = {
+	/**
+	 * Returns the selected HTML code.
+	 *
+	 * @return Selected HTML contents.
+	 * @type string
+	 */
+	getSelectedHTML : function() {
+		var inst = this.instance;
+		var e, r = this.getRng(), h;
+
+		if (tinyMCE.isSafari) {
+			// Not realy perfect!!
+			return r.toString();
+		}
+
+		e = document.createElement("body");
+
+		if (tinyMCE.isGecko)
+			e.appendChild(r.cloneContents());
+		else 
+			e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;
+
+		h = tinyMCE._cleanupHTML(inst, inst.contentDocument, inst.settings, e, e, false, true, false);
+
+		// When editing always use fonts internaly
+		if (tinyMCE.getParam("convert_fonts_to_spans"))
+			tinyMCE.convertSpansToFonts(inst.getDoc());
+
+		return h;
+	},
+
+	/**
+	 * Returns the selected text.
+	 *
+	 * @return Selected text contents.
+	 * @type string
+	 */
+	getSelectedText : function() {
+		var inst = this.instance;
+		var d, r, s, t;
+
+		if (tinyMCE.isMSIE) {
+			d = inst.getDoc();
+
+			if (d.selection.type == "Text") {
+				r = d.selection.createRange();
+				t = r.text;
+			} else
+				t = '';
+		} else {
+			s = this.getSel();
+
+			if (s && s.toString)
+				t = s.toString();
+			else
+				t = '';
+		}
+
+		return t;
+	},
+
+	/**
+	 * Returns a selection bookmark that can be restored later with moveToBookmark.
+	 * This acts much like the one MSIE has built in but this one is persistent if between DOM
+	 * tree rewritings. The simple mode enables a quicker and non persistent bookmark.
+	 *
+	 * @param {boolean} simple If this is set to true, the selection bookmark will not me dom persistent.
+	 * @return Selection bookmark that can be restored later with moveToBookmark.
+	 * @type TinyMCE_Bookmark
+	 */
+	getBookmark : function(simple) {
+		var rng = this.getRng();
+		var doc = this.instance.getDoc();
+		var sp, le, s, e, nl, i, si, ei;
+		var trng, sx, sy, xx = -999999999;
+
+		// Skip Opera for now
+		if (tinyMCE.isOpera)
+			return null;
+
+		sx = doc.body.scrollLeft + doc.documentElement.scrollLeft;
+		sy = doc.body.scrollTop + doc.documentElement.scrollTop;
+
+		if (tinyMCE.isSafari || tinyMCE.isGecko)
+			return {rng : rng, scrollX : sx, scrollY : sy};
+
+		if (tinyMCE.isMSIE) {
+			if (simple)
+				return {rng : rng};
+
+			if (rng.item) {
+				e = rng.item(0);
+
+				nl = doc.getElementsByTagName(e.nodeName);
+				for (i=0; i<nl.length; i++) {
+					if (e == nl[i]) {
+						sp = i;
+						break;
+					}
+				}
+
+				return {
+					tag : e.nodeName,
+					index : sp,
+					scrollX : sx,
+					scrollY : sy
+				};
+			} else {
+				trng = rng.duplicate();
+				trng.collapse(true);
+				sp = Math.abs(trng.move('character', xx));
+
+				trng = rng.duplicate();
+				trng.collapse(false);
+				le = Math.abs(trng.move('character', xx)) - sp;
+
+				return {
+					start : sp,
+					length : le,
+					scrollX : sx,
+					scrollY : sy
+				};
+			}
+		}
+
+		if (tinyMCE.isGecko) {
+			s = tinyMCE.getParentElement(rng.startContainer);
+			for (si=0; si<s.childNodes.length && s.childNodes[si] != rng.startContainer; si++) ;
+
+			nl = doc.getElementsByTagName(s.nodeName);
+			for (i=0; i<nl.length; i++) {
+					if (s == nl[i]) {
+						sp = i;
+						break;
+					}
+			}
+
+			e = tinyMCE.getParentElement(rng.endContainer);
+			for (ei=0; ei<e.childNodes.length && e.childNodes[ei] != rng.endContainer; ei++) ;
+
+			nl = doc.getElementsByTagName(e.nodeName);
+			for (i=0; i<nl.length; i++) {
+					if (e == nl[i]) {
+						le = i;
+						break;
+					}
+			}
+
+			//tinyMCE.debug(s.nodeName, sp, rng.startOffset, '-' , e.nodeName, le, rng.endOffset);
+			//tinyMCE.debug(sx, sy);
+
+			return {
+				startTag : s.nodeName,
+				start : sp,
+				startIndex : si,
+				endTag : e.nodeName,
+				end : le,
+				endIndex : ei,
+				startOffset : rng.startOffset,
+				endOffset : rng.endOffset,
+				scrollX : sx,
+				scrollY : sy
+			};
+		}
+
+		return null;
+	},
+
+	/**
+	 * Restores the selection to the specified bookmark.
+	 *
+	 * @param {TinyMCE_Bookmark} bookmark Bookmark to restore selection from.
+	 * @return true/false if it was successful or not.
+	 * @type boolean
+	 */
+	moveToBookmark : function(bookmark) {
+		var rng, nl, i;
+		var inst = this.instance;
+		var doc = inst.getDoc();
+		var win = inst.getWin();
+		var sel = this.getSel();
+
+		if (!bookmark)
+			return false;
+
+		if (tinyMCE.isSafari) {
+			sel.setBaseAndExtent(bookmark.startContainer, bookmark.startOffset, bookmark.endContainer, bookmark.endOffset);
+			return true;
+		}
+
+		if (tinyMCE.isMSIE) {
+			if (bookmark.rng) {
+				bookmark.rng.select();
+				return true;
+			}
+
+			win.focus();
+
+			if (bookmark.tag) {
+				rng = inst.getBody().createControlRange();
+
+				nl = doc.getElementsByTagName(bookmark.tag);
+
+				if (nl.length > bookmark.index) {
+					try {
+						rng.addElement(nl[bookmark.index]);
+					} catch (ex) {
+						// Might be thrown if the node no longer exists
+					}
+				}
+			} else {
+				rng = inst.getSel().createRange();
+				rng.moveToElementText(inst.getBody());
+				rng.collapse(true);
+				rng.moveStart('character', bookmark.start);
+				rng.moveEnd('character', bookmark.length);
+			}
+
+			rng.select();
+
+			win.scrollTo(bookmark.scrollX, bookmark.scrollY);
+			return true;
+		}
+
+		if (tinyMCE.isGecko && bookmark.rng) {
+			sel.removeAllRanges();
+			sel.addRange(bookmark.rng);
+			win.scrollTo(bookmark.scrollX, bookmark.scrollY);
+			return true;
+		}
+
+		if (tinyMCE.isGecko) {
+	//		try {
+				rng = doc.createRange();
+
+				nl = doc.getElementsByTagName(bookmark.startTag);
+				if (nl.length > bookmark.start)
+					rng.setStart(nl[bookmark.start].childNodes[bookmark.startIndex], bookmark.startOffset);
+
+				nl = doc.getElementsByTagName(bookmark.endTag);
+				if (nl.length > bookmark.end)
+					rng.setEnd(nl[bookmark.end].childNodes[bookmark.endIndex], bookmark.endOffset);
+
+				sel.removeAllRanges();
+				sel.addRange(rng);
+	/*		} catch {
+				// Ignore
+			}*/
+
+			win.scrollTo(bookmark.scrollX, bookmark.scrollY);
+			return true;
+		}
+
+		return false;
+	},
+
+	/**
+	 * Selects the specified node.
+	 *
+	 * @param {HTMLNode} node Node object to move selection to.
+	 * @param {boolean} collapse True/false if it will be collasped.
+	 * @param {boolean} select_text_node True/false if the text contents should be selected or not.
+	 * @param {boolean} to_start True/false if the collapse should be to start or end of range.
+	 */
+	selectNode : function(node, collapse, select_text_node, to_start) {
+		var inst = this.instance, sel, rng, nodes;
+
+		if (!node)
+			return;
+
+		if (typeof(collapse) == "undefined")
+			collapse = true;
+
+		if (typeof(select_text_node) == "undefined")
+			select_text_node = false;
+
+		if (typeof(to_start) == "undefined")
+			to_start = true;
+
+		if (tinyMCE.isMSIE) {
+			rng = inst.getBody().createTextRange();
+
+			try {
+				rng.moveToElementText(node);
+
+				if (collapse)
+					rng.collapse(to_start);
+
+				rng.select();
+			} catch (e) {
+				// Throws illigal agrument in MSIE some times
+			}
+		} else {
+			sel = this.getSel();
+
+			if (!sel)
+				return;
+
+			if (tinyMCE.isSafari) {
+				sel.setBaseAndExtent(node, 0, node, node.innerText.length);
+
+				if (collapse) {
+					if (to_start)
+						sel.collapseToStart();
+					else
+						sel.collapseToEnd();
+				}
+
+				this.scrollToNode(node);
+
+				return;
+			}
+
+			rng = inst.getDoc().createRange();
+
+			if (select_text_node) {
+				// Find first textnode in tree
+				nodes = tinyMCE.getNodeTree(node, new Array(), 3);
+				if (nodes.length > 0)
+					rng.selectNodeContents(nodes[0]);
+				else
+					rng.selectNodeContents(node);
+			} else
+				rng.selectNode(node);
+
+			if (collapse) {
+				// Special treatment of textnode collapse
+				if (!to_start && node.nodeType == 3) {
+					rng.setStart(node, node.nodeValue.length);
+					rng.setEnd(node, node.nodeValue.length);
+				} else
+					rng.collapse(to_start);
+			}
+
+			sel.removeAllRanges();
+			sel.addRange(rng);
+		}
+
+		this.scrollToNode(node);
+
+		// Set selected element
+		tinyMCE.selectedElement = null;
+		if (node.nodeType == 1)
+			tinyMCE.selectedElement = node;
+	},
+
+	/**
+	 * Scrolls to the specified node location.
+	 *
+	 * @param {HTMLNode} node Node to scroll to.
+	 */
+	scrollToNode : function(node) {
+		var inst = this.instance;
+		var pos, doc, scrollX, scrollY, height;
+
+		// Scroll to node position
+		pos = tinyMCE.getAbsPosition(node);
+		doc = inst.getDoc();
+		scrollX = doc.body.scrollLeft + doc.documentElement.scrollLeft;
+		scrollY = doc.body.scrollTop + doc.documentElement.scrollTop;
+		height = tinyMCE.isMSIE ? document.getElementById(inst.editorId).style.pixelHeight : inst.targetElement.clientHeight;
+
+		// Only scroll if out of visible area
+		if (!tinyMCE.settings['auto_resize'] && !(pos.absTop > scrollY && pos.absTop < (scrollY - 25 + height)))
+			inst.contentWindow.scrollTo(pos.absLeft, pos.absTop - height + 25); 
+	},
+
+	/**
+	 * Returns the browsers selection instance.
+	 *
+	 * @return Browser selection instance.
+	 * @type DOMSelection
+	 */
+	getSel : function() {
+		var inst = this.instance;
+
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+			return inst.getDoc().selection;
+
+		return inst.contentWindow.getSelection();
+	},
+
+	/**
+	 * Returns the browsers selections first range instance.
+	 *
+	 * @return Browsers selections first range instance.
+	 * @type DOMRange
+	 */
+	getRng : function() {
+		var inst = this.instance;
+		var sel = this.getSel();
+
+		if (sel == null)
+			return null;
+
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera)
+			return sel.createRange();
+
+		if (tinyMCE.isSafari && !sel.getRangeAt)
+			return '' + window.getSelection();
+
+		return sel.getRangeAt(0);
+	},
+
+	/**
+	 * Returns the currently selected/focused element.
+	 *
+	 * @return Currently selected element.
+	 * @type HTMLElement
+	 */
+	getFocusElement : function() {
+		var inst = this.instance;
+
+		if (tinyMCE.isMSIE && !tinyMCE.isOpera) {
+			var doc = inst.getDoc();
+			var rng = doc.selection.createRange();
+
+	//		if (rng.collapse)
+	//			rng.collapse(true);
+
+			var elm = rng.item ? rng.item(0) : rng.parentElement();
+		} else {
+			if (inst.isHidden())
+				return inst.getBody();
+
+			var sel = this.getSel();
+			var rng = this.getRng();
+
+			if (!sel || !rng)
+				return null;
+
+			var elm = rng.commonAncestorContainer;
+			//var elm = (sel && sel.anchorNode) ? sel.anchorNode : null;
+
+			// Handle selection a image or other control like element such as anchors
+			if (!rng.collapsed) {
+				// Is selection small
+				if (rng.startContainer == rng.endContainer) {
+					if (rng.startOffset - rng.endOffset < 2) {
+						if (rng.startContainer.hasChildNodes())
+							elm = rng.startContainer.childNodes[rng.startOffset];
+					}
+				}
+			}
+
+			// Get the element parent of the node
+			elm = tinyMCE.getParentElement(elm);
+
+			//if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img")
+			//	elm = tinyMCE.selectedElement;
+		}
+
+		return elm;
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_URL.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_URL.class.js.html new file mode 100644 index 000000000..3ecaaef6e --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_URL.class.js.html @@ -0,0 +1,530 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_URL.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_URL.class.js'

+ +

+ +
+ + + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_URL.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:31 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ *
+ * The contents of this file will be wrapped in a class later on.
+ */
+
+/**
+ * Parses a URL in to its diffrent components.
+ *
+ * @param {string} url_str URL string to parse into a URL object.
+ * @return URL object based on input string.
+ * @type TinyMCE_URL_Item
+ */
+TinyMCE_Engine.prototype.parseURL = function(url_str) {
+	var urlParts = new Array();
+
+	if (url_str) {
+		var pos, lastPos;
+
+		// Parse protocol part
+		pos = url_str.indexOf('://');
+		if (pos != -1) {
+			urlParts['protocol'] = url_str.substring(0, pos);
+			lastPos = pos + 3;
+		}
+
+		// Find port or path start
+		for (var i=lastPos; i<url_str.length; i++) {
+			var chr = url_str.charAt(i);
+
+			if (chr == ':')
+				break;
+
+			if (chr == '/')
+				break;
+		}
+		pos = i;
+
+		// Get host
+		urlParts['host'] = url_str.substring(lastPos, pos);
+
+		// Get port
+		urlParts['port'] = "";
+		lastPos = pos;
+		if (url_str.charAt(pos) == ':') {
+			pos = url_str.indexOf('/', lastPos);
+			urlParts['port'] = url_str.substring(lastPos+1, pos);
+		}
+
+		// Get path
+		lastPos = pos;
+		pos = url_str.indexOf('?', lastPos);
+
+		if (pos == -1)
+			pos = url_str.indexOf('#', lastPos);
+
+		if (pos == -1)
+			pos = url_str.length;
+
+		urlParts['path'] = url_str.substring(lastPos, pos);
+
+		// Get query
+		lastPos = pos;
+		if (url_str.charAt(pos) == '?') {
+			pos = url_str.indexOf('#');
+			pos = (pos == -1) ? url_str.length : pos;
+			urlParts['query'] = url_str.substring(lastPos+1, pos);
+		}
+
+		// Get anchor
+		lastPos = pos;
+		if (url_str.charAt(pos) == '#') {
+			pos = url_str.length;
+			urlParts['anchor'] = url_str.substring(lastPos+1, pos);
+		}
+	}
+
+	return urlParts;
+};
+
+/**
+ * Serializes the specified URL object into a string.
+ *
+ * @param {TinyMCE_URL_Item} up URL object to serialize.
+ * @return Serialized URL object.
+ * @type string
+ */
+TinyMCE_Engine.prototype.serializeURL = function(up) {
+	var o = "";
+
+	if (up['protocol'])
+		o += up['protocol'] + "://";
+
+	if (up['host'])
+		o += up['host'];
+
+	if (up['port'])
+		o += ":" + up['port'];
+
+	if (up['path'])
+		o += up['path'];
+
+	if (up['query'])
+		o += "?" + up['query'];
+
+	if (up['anchor'])
+		o += "#" + up['anchor'];
+
+	return o;
+};
+
+/**
+ * Converts an absolute path to relative path.
+ *
+ * @param {string} base_url URL to make as a base path, URLs will be converted relative from this point.
+ * @param {string} url_to_relative URL to convert into a relative URL.
+ * @return Relative URL based in input.
+ * @type string
+ */
+TinyMCE_Engine.prototype.convertAbsoluteURLToRelativeURL = function(base_url, url_to_relative) {
+	var baseURL = this.parseURL(base_url);
+	var targetURL = this.parseURL(url_to_relative);
+	var strTok1;
+	var strTok2;
+	var breakPoint = 0;
+	var outPath = "";
+	var forceSlash = false;
+
+	if (targetURL.path == "")
+		targetURL.path = "/";
+	else
+		forceSlash = true;
+
+	// Crop away last path part
+	base_url = baseURL.path.substring(0, baseURL.path.lastIndexOf('/'));
+	strTok1 = base_url.split('/');
+	strTok2 = targetURL.path.split('/');
+
+	if (strTok1.length >= strTok2.length) {
+		for (var i=0; i<strTok1.length; i++) {
+			if (i >= strTok2.length || strTok1[i] != strTok2[i]) {
+				breakPoint = i + 1;
+				break;
+			}
+		}
+	}
+
+	if (strTok1.length < strTok2.length) {
+		for (var i=0; i<strTok2.length; i++) {
+			if (i >= strTok1.length || strTok1[i] != strTok2[i]) {
+				breakPoint = i + 1;
+				break;
+			}
+		}
+	}
+
+	if (breakPoint == 1)
+		return targetURL.path;
+
+	for (var i=0; i<(strTok1.length-(breakPoint-1)); i++)
+		outPath += "../";
+
+	for (var i=breakPoint-1; i<strTok2.length; i++) {
+		if (i != (breakPoint-1))
+			outPath += "/" + strTok2[i];
+		else
+			outPath += strTok2[i];
+	}
+
+	targetURL.protocol = null;
+	targetURL.host = null;
+	targetURL.port = null;
+	targetURL.path = outPath == "" && forceSlash ? "/" : outPath;
+
+	// Remove document prefix from local anchors
+	var fileName = baseURL.path;
+	var pos;
+
+	if ((pos = fileName.lastIndexOf('/')) != -1)
+		fileName = fileName.substring(pos + 1);
+
+	// Is local anchor
+	if (fileName == targetURL.path && targetURL.anchor != "")
+		targetURL.path = "";
+
+	// If empty and not local anchor force filename or slash
+	if (targetURL.path == "" && !targetURL.anchor)
+		targetURL.path = fileName != "" ? fileName : "/";
+
+	return this.serializeURL(targetURL);
+};
+
+/**
+ * Converts an relative path to absolute path.
+ *
+ * @param {string} base_url URL to make as a base path, URLs will be converted absolute from this point.
+ * @param {string} relative_url URL to convert into a absolute URL.
+ * @return Absolute URL based in input.
+ * @type string
+ */
+TinyMCE_Engine.prototype.convertRelativeToAbsoluteURL = function(base_url, relative_url) {
+	var baseURL = this.parseURL(base_url);
+	var relURL = this.parseURL(relative_url);
+
+	if (relative_url == "" || relative_url.charAt(0) == '/' || relative_url.indexOf('://') != -1 || relative_url.indexOf('mailto:') != -1 || relative_url.indexOf('javascript:') != -1)
+		return relative_url;
+
+	// Split parts
+	baseURLParts = baseURL['path'].split('/');
+	relURLParts = relURL['path'].split('/');
+
+	// Remove empty chunks
+	var newBaseURLParts = new Array();
+	for (var i=baseURLParts.length-1; i>=0; i--) {
+		if (baseURLParts[i].length == 0)
+			continue;
+
+		newBaseURLParts[newBaseURLParts.length] = baseURLParts[i];
+	}
+	baseURLParts = newBaseURLParts.reverse();
+
+	// Merge relURLParts chunks
+	var newRelURLParts = new Array();
+	var numBack = 0;
+	for (var i=relURLParts.length-1; i>=0; i--) {
+		if (relURLParts[i].length == 0 || relURLParts[i] == ".")
+			continue;
+
+		if (relURLParts[i] == '..') {
+			numBack++;
+			continue;
+		}
+
+		if (numBack > 0) {
+			numBack--;
+			continue;
+		}
+
+		newRelURLParts[newRelURLParts.length] = relURLParts[i];
+	}
+
+	relURLParts = newRelURLParts.reverse();
+
+	// Remove end from absolute path
+	var len = baseURLParts.length-numBack;
+	var absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/');
+	var start = "", end = "";
+
+	// Build output URL
+	relURL.protocol = baseURL.protocol;
+	relURL.host = baseURL.host;
+	relURL.port = baseURL.port;
+
+	// Re-add trailing slash if it's removed
+	if (relURL.path.charAt(relURL.path.length-1) == "/")
+		absPath += "/";
+
+	relURL.path = absPath;
+
+	return this.serializeURL(relURL);
+};
+
+/**
+ * Converts the specified URL based in TinyMCE configuration settings.
+ *
+ * @param {string} url URL to convert based on config.
+ * @param {HTMLElement} node HTML element that holds the URL.
+ * @param {boolean} on_save Is this convertion the final output URL.
+ * @return Converted URL string.
+ * @type string
+ */
+TinyMCE_Engine.prototype.convertURL = function(url, node, on_save) {
+	var prot = document.location.protocol;
+	var host = document.location.hostname;
+	var port = document.location.port;
+
+	// Pass through file protocol
+	if (prot == "file:")
+		return url;
+
+	// Something is wrong, remove weirdness
+	url = tinyMCE.regexpReplace(url, '(http|https):///', '/');
+
+	// Mailto link or anchor (Pass through)
+	if (url.indexOf('mailto:') != -1 || url.indexOf('javascript:') != -1 || tinyMCE.regexpReplace(url,'[ \t\r\n\+]|%20','').charAt(0) == "#")
+		return url;
+
+	// Fix relative/Mozilla
+	if (!tinyMCE.isMSIE && !on_save && url.indexOf("://") == -1 && url.charAt(0) != '/')
+		return tinyMCE.settings['base_href'] + url;
+
+	// Handle relative URLs
+	if (on_save && tinyMCE.getParam('relative_urls')) {
+		var curl = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url);
+		if (curl.charAt(0) == '/')
+			curl = tinyMCE.settings['document_base_prefix'] + curl;
+
+		var urlParts = tinyMCE.parseURL(curl);
+		var tmpUrlParts = tinyMCE.parseURL(tinyMCE.settings['document_base_url']);
+
+		// Force relative
+		if (urlParts['host'] == tmpUrlParts['host'] && (urlParts['port'] == tmpUrlParts['port']))
+			return tinyMCE.convertAbsoluteURLToRelativeURL(tinyMCE.settings['document_base_url'], curl);
+	}
+
+	// Handle absolute URLs
+	if (!tinyMCE.getParam('relative_urls')) {
+		var urlParts = tinyMCE.parseURL(url);
+		var baseUrlParts = tinyMCE.parseURL(tinyMCE.settings['base_href']);
+
+		// Force absolute URLs from relative URLs
+		url = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], url);
+
+		// If anchor and path is the same page
+		if (urlParts['anchor'] && urlParts['path'] == baseUrlParts['path'])
+			return "#" + urlParts['anchor'];
+	}
+
+	// Remove current domain
+	if (tinyMCE.getParam('remove_script_host')) {
+		var start = "", portPart = "";
+
+		if (port != "")
+			portPart = ":" + port;
+
+		start = prot + "//" + host + portPart + "/";
+
+		if (url.indexOf(start) == 0)
+			url = url.substring(start.length-1);
+	}
+
+	return url;
+};
+
+/**
+ * Converts all img and a element URLs to absolute URLs. This will use the mce_src or mce_href attribute values
+ * if they are provided. This function is used when the editor is initialized.
+ *
+ * @param {HTMLElement} body HTML element to convert all URLs in.
+ */
+TinyMCE_Engine.prototype.convertAllRelativeURLs = function(body) {
+	// Convert all image URL:s to absolute URL
+	var elms = body.getElementsByTagName("img");
+	for (var i=0; i<elms.length; i++) {
+		var src = tinyMCE.getAttrib(elms[i], 'src');
+
+		var msrc = tinyMCE.getAttrib(elms[i], 'mce_src');
+		if (msrc != "")
+			src = msrc;
+
+		if (src != "") {
+			src = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src);
+			elms[i].setAttribute("src", src);
+		}
+	}
+
+	// Convert all link URL:s to absolute URL
+	var elms = body.getElementsByTagName("a");
+	for (var i=0; i<elms.length; i++) {
+		var href = tinyMCE.getAttrib(elms[i], 'href');
+
+		var mhref = tinyMCE.getAttrib(elms[i], 'mce_href');
+		if (mhref != "")
+			href = mhref;
+
+		if (href && href != "") {
+			href = tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], href);
+			elms[i].setAttribute("href", href);
+		}
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_UndoRedo.class.js.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_UndoRedo.class.js.html new file mode 100644 index 000000000..74809f5fb --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary-TinyMCE_UndoRedo.class.js.html @@ -0,0 +1,296 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

TinyMCE_UndoRedo.class.js

+ +
+ + + + +

Summary

+

+ + No overview generated for 'TinyMCE_UndoRedo.class.js'

+ +

+ +
+ + + + + + + + + + + + +
+ + Class Summary + +
TinyMCE_UndoRedo 
+
+ + + + + + + +
/**
+ * $RCSfile: overview-summary-TinyMCE_UndoRedo.class.js.html,v $
+ * $Revision: 1.42 $
+ * $Date: 2006/04/14 20:00:31 $
+ *
+ * @author Moxiecode
+ * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved.
+ */
+
+/**
+ * Constructs a undo redo instance, this instance handles the custom undo/redo handeling in TinyMCE.
+ *
+ * @param {TinyMCE_Control} inst TinyMCE editor control instance.
+ * @constructor
+ */
+function TinyMCE_UndoRedo(inst) {
+	this.instance = inst;
+	this.undoLevels = new Array();
+	this.undoIndex = 0;
+	this.typingUndoIndex = -1;
+	this.undoRedo = true;
+};
+
+TinyMCE_UndoRedo.prototype = {
+	/**
+	 * Adds a new undo level, this will take a snapshot of the current instance HTML or use the specified level.
+	 *
+	 * @param {TinyMCE_UndoRedoLevel} l Optional undo/redo level to add.
+	 * @return true/false on success or failure.
+	 * @type boolean
+	 */
+	add : function(l) {
+		var b;
+
+		if (l) {
+			this.undoLevels[this.undoLevels.length] = l;
+			return true;
+		}
+
+		var inst = this.instance;
+
+		if (this.typingUndoIndex != -1) {
+			this.undoIndex = this.typingUndoIndex;
+			// tinyMCE.debug("Override: " + this.undoIndex);
+		}
+
+		var newHTML = tinyMCE.trim(inst.getBody().innerHTML);
+		if (this.undoLevels[this.undoIndex] && newHTML != this.undoLevels[this.undoIndex].content) {
+			//tinyMCE.debug(newHTML, this.undoLevels[this.undoIndex]);
+
+			tinyMCE.dispatchCallback(inst, 'onchange_callback', 'onChange', inst);
+
+			// Time to compress
+			var customUndoLevels = tinyMCE.settings['custom_undo_redo_levels'];
+			if (customUndoLevels != -1 && this.undoLevels.length > customUndoLevels) {
+				for (var i=0; i<this.undoLevels.length-1; i++) {
+					//tinyMCE.debug(this.undoLevels[i] + "=" + this.undoLevels[i+1]);
+					this.undoLevels[i] = this.undoLevels[i+1];
+				}
+
+				this.undoLevels.length--;
+				this.undoIndex--;
+			}
+
+			b = inst.undoBookmark;
+			if (!b)
+				b = inst.selection.getBookmark();
+
+			this.undoIndex++;
+			this.undoLevels[this.undoIndex] = {
+				content : newHTML,
+				bookmark : b
+			};
+
+			this.undoLevels.length = this.undoIndex + 1;
+
+			//tinyMCE.debug("level added" + this.undoIndex);
+			return true;
+
+			// tinyMCE.debug(this.undoIndex + "," + (this.undoLevels.length-1));
+		}
+
+		return false;
+	},
+
+	/**
+	 * Performes a undo action, this will restore the HTML contents of the editor to a former state.
+	 */
+	undo : function() {
+		var inst = this.instance;
+
+		// Do undo
+		if (this.undoIndex > 0) {
+			this.undoIndex--;
+			tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);
+			inst.repaint();
+			if (inst.settings.custom_undo_redo_restore_selection)
+				inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);
+		}
+
+		// tinyMCE.debug("Undo - undo levels:" + this.undoLevels.length + ", undo index: " + this.undoIndex);
+	},
+
+	/**
+	 * Performes a undo action, this will restore the HTML contents of the editor to a former undoed state.
+	 */
+	redo : function() {
+		var inst = this.instance;
+
+		tinyMCE.execCommand("mceEndTyping");
+
+		if (this.undoIndex < (this.undoLevels.length-1)) {
+			this.undoIndex++;
+			tinyMCE.setInnerHTML(inst.getBody(), this.undoLevels[this.undoIndex].content);
+			inst.repaint();
+//					if (this.undoIndex > 0)
+//						inst.selection.moveToBookmark(this.undoLevels[this.undoIndex-1].bookmark);
+			if (inst.settings.custom_undo_redo_restore_selection)
+				inst.selection.moveToBookmark(this.undoLevels[this.undoIndex].bookmark);
+			// tinyMCE.debug("Redo - undo levels:" + this.undoLevels.length + ", undo index: " + this.undoIndex);
+		}
+
+		tinyMCE.triggerNodeChange();
+	}
+};
+
+
+ + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-summary.html b/www/extras/tinymce2/docs/tinymce_api/overview-summary.html new file mode 100644 index 000000000..efd189df4 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-summary.html @@ -0,0 +1,231 @@ + + + + + Overview + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ +

JSDoc Documentation

+ +
+ + +

Summary

+

+ + No summary generated for these documents. + +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + File Summary + +
TinyMCE_Array.class.js 
TinyMCE_Cleanup.class.js 
TinyMCE_Control.class.js 
TinyMCE_Debug.class.js 
TinyMCE_DOMUtils.class.js 
TinyMCE_Engine.class.js 
TinyMCE_Event.class.js 
TinyMCE_ForceParagraphs.class.js 
TinyMCE_Layer.class.js 
TinyMCE_Menu.class.js 
TinyMCE_Popup.class.js 
TinyMCE_Selection.class.js 
TinyMCE_UndoRedo.class.js 
TinyMCE_URL.class.js 
+
+ + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/overview-tree.html b/www/extras/tinymce2/docs/tinymce_api/overview-tree.html new file mode 100644 index 000000000..c1def274b --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/overview-tree.html @@ -0,0 +1,149 @@ + + + + + + Class Hierarchy + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+

Class Hierarchy

+ + + +
+ + + + + + + + + + + + + +
+ +
+ + +
+ + + +
Documentation generated by JSDoc on Fri Apr 14 21:59:23 2006
+ + diff --git a/www/extras/tinymce2/docs/tinymce_api/stylesheet.css b/www/extras/tinymce2/docs/tinymce_api/stylesheet.css new file mode 100644 index 000000000..bbad7a426 --- /dev/null +++ b/www/extras/tinymce2/docs/tinymce_api/stylesheet.css @@ -0,0 +1,39 @@ +/* JSDoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF } /* Light mauve */ +.TableRowColor { background: #FFFFFF } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif } +.FrameHeadingFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif } +.FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, san-serif } + +/* Example of smaller, sans-serif font in frames */ +/* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */ + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF;}/* Light mauve */ +.NavBarCell1Rev { background-color:#00008B;}/* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;} + +.jsdoc_ctime { font-family: Arial, Helvetica, sans-serif; font-size: 9pt; + text-align: right } + +/* Sourcecode view */ +.sourceview { background: #FFFFFF } +.attrib { color: #DD7777 } +.comment { color: #55AA55 } +.reserved { color: #FF5555 } +.literal { color: #5555FF } + diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_euc-jp.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_euc-jp.js new file mode 100755 index 000000000..978b291a7 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_euc-jp.js @@ -0,0 +1,8 @@ +// ja-euc-jp language pack + +/* Remember to namespace the language parameters lang__ */ + +tinyMCE.addToLang('',{ +template_title : '¥Æ¥ó¥×¥ì¡¼¥È¤Î¥Ý¥Ã¥×¥¢¥Ã¥×', +template_desc : '¥Æ¥ó¥×¥ì¡¼¥È¤Î¥Ü¥¿¥ó' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_shift_jis.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_shift_jis.js new file mode 100755 index 000000000..8fb4a090d --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_shift_jis.js @@ -0,0 +1,8 @@ +// ja-ƒVƒtƒgJIS language pack + +/* Remember to namespace the language parameters lang__ */ + +tinyMCE.addToLang('',{ +template_title : 'ƒeƒ“ƒvƒŒ[ƒg‚̃|ƒbƒvƒAƒbƒv', +template_desc : 'ƒeƒ“ƒvƒŒ[ƒg‚̃{ƒ^ƒ“' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_utf-8.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_utf-8.js new file mode 100755 index 000000000..90a5bdfba --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/_template/lang/ja_utf-8.js @@ -0,0 +1,8 @@ +// ja-utf-8 language pack + +/* Remember to namespace the language parameters lang__ */ + +tinyMCE.addToLang('',{ +template_title : 'テンプレートã®ãƒãƒƒãƒ—アップ', +template_desc : 'テンプレートã®ãƒœã‚¿ãƒ³' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/editor_plugin.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/editor_plugin.js new file mode 100644 index 000000000..b8b9ee9d4 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('layer','en');var TinyMCE_LayerPlugin={getInfo:function(){return{longname:'Layer',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_layer.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},initInstance:function(inst){if(tinyMCE.isMSIE&&!tinyMCE.isOpera)inst.getDoc().execCommand('2D-Position');},handleEvent:function(e){var inst=tinyMCE.selectedInstance,self=TinyMCE_LayerPlugin;var w=inst.getWin(),le=inst._lastStyleElm,e;if(tinyMCE.isGecko){e=self._getParentLayer(inst.getFocusElement());if(e){if(!inst._lastStyleElm){e.style.overflow='auto';inst._lastStyleElm=e;}}else if(le){le=inst._lastStyleElm;le.style.width=le.scrollWidth+'px';le.style.height=le.scrollHeight+'px';le.style.overflow='';inst._lastStyleElm=null;}}return true;},handleVisualAid:function(el,deep,state,inst){var nl=inst.getDoc().getElementsByTagName("div"),i;for(i=0;i-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;iz[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;}inst.repaint();},_getParentLayer:function(n){return tinyMCE.getParentNode(n,function(n){return n.nodeType==1&&new RegExp('absolute|relative|static','gi').test(n.style.position);});},_insertLayer:function(){var inst=tinyMCE.selectedInstance;var e=tinyMCE.getParentElement(inst.getFocusElement());var p=tinyMCE.getAbsPosition(e);var d=inst.getDoc();var ne=d.createElement('div');var h=inst.selection.getSelectedHTML();ne.style.position='absolute';ne.style.left=p.absLeft+'px';ne.style.top=(p.absTop>20?p.absTop:20)+'px';ne.style.width='100px';ne.style.height='100px';ne.className='mceVisualAid';if(!h)h=tinyMCE.getLang('lang_layer_content');ne.innerHTML=h;d.body.appendChild(ne);},_toggleAbsolute:function(){var inst=tinyMCE.selectedInstance,self=TinyMCE_LayerPlugin;var le=self._getParentLayer(inst.getFocusElement());if(le==null)le=tinyMCE.getParentElement(inst.getFocusElement(),'div,p,img');if(le){if(le.style.position.toLowerCase()=="absolute"){le.style.position="";le.style.left="";le.style.top="";}else{le.style.position="absolute";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';tinyMCE.handleVisualAid(inst.getBody(),true,inst.visualAid,inst);}inst.repaint();tinyMCE.triggerNodeChange();}}};tinyMCE.addPlugin("layer",TinyMCE_LayerPlugin); \ No newline at end of file diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js new file mode 100644 index 000000000..af4934010 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/editor_plugin_src.js @@ -0,0 +1,252 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.2 $ + * $Date: 2006/05/03 14:12:12 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('layer', 'en'); + +var TinyMCE_LayerPlugin = { + getInfo : function() { + return { + longname : 'Layer', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_layer.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + initInstance : function(inst) { + if (tinyMCE.isMSIE && !tinyMCE.isOpera) + inst.getDoc().execCommand('2D-Position'); + }, + + handleEvent : function(e) { + var inst = tinyMCE.selectedInstance, self = TinyMCE_LayerPlugin; + var w = inst.getWin(), le = inst._lastStyleElm, e; + + if (tinyMCE.isGecko) { + e = self._getParentLayer(inst.getFocusElement()); + + if (e) { + if (!inst._lastStyleElm) { + e.style.overflow = 'auto'; + inst._lastStyleElm = e; + } + } else if (le) { + le = inst._lastStyleElm; + le.style.width = le.scrollWidth + 'px'; + le.style.height = le.scrollHeight + 'px'; + le.style.overflow = ''; + inst._lastStyleElm = null; + } + } + + return true; + }, + + handleVisualAid : function(el, deep, state, inst) { + var nl = inst.getDoc().getElementsByTagName("div"), i; + + for (i=0; i -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 { + // Move forward + + // Try find a higher one + for (i=0; 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; + } + + inst.repaint(); + }, + + _getParentLayer : function(n) { + return tinyMCE.getParentNode(n, function(n) { + return n.nodeType == 1 && new RegExp('absolute|relative|static', 'gi').test(n.style.position); + }); + }, + + _insertLayer : function() { + var inst = tinyMCE.selectedInstance; + var e = tinyMCE.getParentElement(inst.getFocusElement()); + var p = tinyMCE.getAbsPosition(e); + var d = inst.getDoc(); + var ne = d.createElement('div'); + var h = inst.selection.getSelectedHTML(); + + // Move div + ne.style.position = 'absolute'; + ne.style.left = p.absLeft + 'px'; + ne.style.top = (p.absTop > 20 ? p.absTop : 20) + 'px'; + ne.style.width = '100px'; + ne.style.height = '100px'; + ne.className = 'mceVisualAid'; + + if (!h) + h = tinyMCE.getLang('lang_layer_content'); + + ne.innerHTML = h; + + // Add it + d.body.appendChild(ne); + }, + + _toggleAbsolute : function() { + var inst = tinyMCE.selectedInstance, self = TinyMCE_LayerPlugin; + var le = self._getParentLayer(inst.getFocusElement()); + + if (le == null) + le = tinyMCE.getParentElement(inst.getFocusElement(), 'div,p,img'); + + if (le) { + if (le.style.position.toLowerCase() == "absolute") { + le.style.position = ""; + le.style.left = ""; + le.style.top = ""; + } else { + le.style.position = "absolute"; + + 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'; + + tinyMCE.handleVisualAid(inst.getBody(), true, inst.visualAid, inst); + } + + inst.repaint(); + tinyMCE.triggerNodeChange(); + } + } +}; + +tinyMCE.addPlugin("layer", TinyMCE_LayerPlugin); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/absolute.gif b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/absolute.gif new file mode 100644 index 000000000..72cffddc3 Binary files /dev/null and b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/absolute.gif differ diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/backward.gif b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/backward.gif new file mode 100644 index 000000000..466b15865 Binary files /dev/null and b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/backward.gif differ diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/forward.gif b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/forward.gif new file mode 100644 index 000000000..e8b7a5a11 Binary files /dev/null and b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/forward.gif differ diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/insert_layer.gif b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/insert_layer.gif new file mode 100644 index 000000000..bc29af076 Binary files /dev/null and b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/images/insert_layer.gif differ diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/en.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/en.js new file mode 100755 index 000000000..cdd8c22b2 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/en.js @@ -0,0 +1,9 @@ +// UK lang variables + +tinyMCE.addToLang('layer',{ +insertlayer_desc : 'Insert new layer', +forward_desc : 'Move forward', +backward_desc : 'Move backward', +absolute_desc : 'Toggle absolute positioning', +content : 'New layer...' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/fi.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/fi.js new file mode 100755 index 000000000..0332dc022 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/fi.js @@ -0,0 +1,9 @@ +// FI lang variables + +tinyMCE.addToLang('layer',{ +insertlayer_desc : 'Lisää uusi taso', +forward_desc : 'Liiku eteenpäin', +backward_desc : 'Liiku taaksepäin', +absolute_desc : 'Kytke absoluuttinen asettelu päälle/pois', +content : 'Uusi taso...' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/fr.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/fr.js new file mode 100755 index 000000000..8d2de679d --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/fr.js @@ -0,0 +1,9 @@ +// UK lang variables + +tinyMCE.addToLang('layer',{ +insertlayer_desc : 'Insérer un nouveau calque', +forward_desc : 'Avancer', +backward_desc : 'Reculer', +absolute_desc : 'Passer en positionnement absolu', +content : 'Nouveau calque...' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/it.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/it.js new file mode 100755 index 000000000..6e85794b8 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/langs/it.js @@ -0,0 +1,9 @@ +// IT lang variables + +tinyMCE.addToLang('layer',{ +insertlayer_desc : 'Inserisci nuovo layer', +forward_desc : 'Sposta verso l\'alto', +backward_desc : 'Sposta verso il basso', +absolute_desc : 'Abilita o disabilita posizionamento assoluto', +content : 'Nuovo livello...' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/readme.txt b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/layer/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/css/props.css b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/css/props.css new file mode 100644 index 000000000..3b2e33d77 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/css/props.css @@ -0,0 +1,63 @@ +#text_font { + width: 250px; +} + +#text_size { + width: 70px; +} + +.mceAddSelectValue { + background-color: #DDDDDD; +} + +select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left { + width: 70px; +} + +#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex { + width: 70px; +} + +#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left { + width: 70px; +} + +#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left { + width: 70px; +} + +.panel_wrapper div.current { + padding-top: 10px; + height: 230px; +} + +.delim { + b2ackground-color: #DDDDDD; + border-left: 1px solid gray; +} + +.tdelim { + border-bottom: 1px solid gray; +} + +#block_display { + width: 145px; +} + +#list_type { + width: 115px; +} + +.disabled { + background-color: #EEEEEE; +} + +#apply { + font-weight: bold; + width: 78px; + height: 21px; + border: 0; + background-image: url('../images/apply_button_bg.gif'); + cursor: pointer; +} + diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/editor_plugin.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/editor_plugin.js new file mode 100644 index 000000000..e5a33dc9d --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/editor_plugin.js @@ -0,0 +1 @@ +tinyMCE.importPluginLanguagePack('style','en');var TinyMCE_StylePlugin={getInfo:function(){return{longname:'Style',author:'Moxiecode Systems',authorurl:'http://tinymce.moxiecode.com',infourl:'http://tinymce.moxiecode.com/tinymce/docs/plugin_style.html',version:tinyMCE.majorVersion+"."+tinyMCE.minorVersion};},getControlHTML:function(cn){switch(cn){case"styleprops":return tinyMCE.getButtonHTML(cn,'lang_style_styleinfo_desc','{$pluginurl}/images/style_info.gif','mceStyleProps',true);}return"";},execCommand:function(editor_id,element,command,user_interface,value){var e,inst;switch(command){case"mceStyleProps":TinyMCE_StylePlugin._styleProps();return true;case"mceSetElementStyle":inst=tinyMCE.getInstanceById(editor_id);e=inst.selection.getFocusElement();if(e){e.style.cssText=value;inst.repaint();}return true;}return false;},handleNodeChange:function(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){},_styleProps:function(){var e=tinyMCE.selectedInstance.selection.getFocusElement();if(!e)return;tinyMCE.openWindow({file:'../../plugins/style/props.htm',width:480+tinyMCE.getLang('lang_style_props_delta_width',0),height:320+tinyMCE.getLang('lang_style_props_delta_height',0)},{editor_id:tinyMCE.selectedInstance.editorId,inline:"yes",style_text:e.style.cssText});}};tinyMCE.addPlugin("style",TinyMCE_StylePlugin); \ No newline at end of file diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/editor_plugin_src.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/editor_plugin_src.js new file mode 100644 index 000000000..27ba20ee8 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/editor_plugin_src.js @@ -0,0 +1,81 @@ +/** + * $RCSfile: editor_plugin_src.js,v $ + * $Revision: 1.1 $ + * $Date: 2006/05/03 10:46:42 $ + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +/* Import plugin specific language pack */ +tinyMCE.importPluginLanguagePack('style', 'en'); + +var TinyMCE_StylePlugin = { + getInfo : function() { + return { + longname : 'Style', + author : 'Moxiecode Systems', + authorurl : 'http://tinymce.moxiecode.com', + infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_style.html', + version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion + }; + }, + + getControlHTML : function(cn) { + switch (cn) { + case "styleprops": + return tinyMCE.getButtonHTML(cn, 'lang_style_styleinfo_desc', '{$pluginurl}/images/style_info.gif', 'mceStyleProps', true); + } + + return ""; + }, + + execCommand : function(editor_id, element, command, user_interface, value) { + var e, inst; + + // Handle commands + switch (command) { + case "mceStyleProps": + TinyMCE_StylePlugin._styleProps(); + return true; + + case "mceSetElementStyle": + inst = tinyMCE.getInstanceById(editor_id); + e = inst.selection.getFocusElement(); + + if (e) { + e.style.cssText = value; + inst.repaint(); + } + + return true; + } + + // Pass to next handler in chain + return false; + }, + + handleNodeChange : function(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { + }, + + // Private plugin specific methods + + _styleProps : function() { + var e = tinyMCE.selectedInstance.selection.getFocusElement(); + + if (!e) + return; + + tinyMCE.openWindow({ + file : '../../plugins/style/props.htm', + width : 480 + tinyMCE.getLang('lang_style_props_delta_width', 0), + height : 320 + tinyMCE.getLang('lang_style_props_delta_height', 0) + }, { + editor_id : tinyMCE.selectedInstance.editorId, + inline : "yes", + style_text : e.style.cssText + }); + } +}; + +tinyMCE.addPlugin("style", TinyMCE_StylePlugin); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/images/apply_button_bg.gif b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/images/apply_button_bg.gif new file mode 100644 index 000000000..979e868ab Binary files /dev/null and b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/images/apply_button_bg.gif differ diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/images/style_info.gif b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/images/style_info.gif new file mode 100644 index 000000000..41f227125 Binary files /dev/null and b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/images/style_info.gif differ diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/jscripts/props.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/jscripts/props.js new file mode 100644 index 000000000..4a6a33043 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/jscripts/props.js @@ -0,0 +1,630 @@ +var defaultFonts = "" + + "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Courier New, Courier, mono=Courier New, Courier, mono;" + + "Times New Roman, Times, serif=Times New Roman, Times, serif;" + + "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + + "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + + "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif"; + +var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger"; +var defaultMeasurement = "+pixels=px;points=pt;in;cm;mm;picas;ems;exs;%"; +var defaultSpacingMeasurement = "pixels=px;points=pt;in;cm;mm;picas;+ems;exs;%"; +var defaultIndentMeasurement = "pixels=px;+points=pt;in;cm;mm;picas;ems;exs;%"; +var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900"; +var defaultTextStyle = "normal;italic;oblique"; +var defaultVariant = "normal;small-caps"; +var defaultLineHeight = "normal"; +var defaultAttachment = "fixed;scroll"; +var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y"; +var defaultPosH = "left;center;right"; +var defaultPosV = "top;center;bottom"; +var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom"; +var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none"; +var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset"; +var defaultBorderWidth = "thin;medium;thick"; +var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none"; + +function init() { + var ce = document.getElementById('container'); + + ce.style.cssText = tinyMCEPopup.getWindowArg('style_text'); + + tinyMCEPopup.resizeToInnerSize(); + + document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color'); + document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color'); + document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top'); + document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right'); + document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom'); + document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left'); + + fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true); + fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true); + fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true); + fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true); + fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true); + fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true); + fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true); + fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true); + fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true); + + fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true); + fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true); + + fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true); + fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true); + fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true); + fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true); + fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true); + fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true); + fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true); + fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true); + + fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true); + fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true); + fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true); + fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true); + + fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true); + fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true); + + fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true); + fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true); + + fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true); + fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true); + + fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true); + + fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true); + + fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true); + fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true); + + TinyMCE_EditableSelects.init(); + setupFormData(); + showDisabledControls(); +} + +function setupFormData() { + var ce = document.getElementById('container'), f = document.forms[0], s, b, i; + + // Setup text fields + + selectByValue(f, 'text_font', ce.style.fontFamily, true, true); + selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true); + selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize)); + selectByValue(f, 'text_weight', ce.style.fontWeight, true, true); + selectByValue(f, 'text_style', ce.style.fontStyle, true, true); + selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true); + selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight)); + selectByValue(f, 'text_case', ce.style.textTransform, true, true); + selectByValue(f, 'text_variant', ce.style.fontVariant, true, true); + f.text_color.value = ce.style.color; + updateColor('text_color_pick', 'text_color'); + f.text_underline.checked = inStr(ce.style.textDecoration, 'underline'); + f.text_overline.checked = inStr(ce.style.textDecoration, 'overline'); + f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through'); + f.text_blink.checked = inStr(ce.style.textDecoration, 'blink'); + + // Setup background fields + + f.background_color.value = ce.style.backgroundColor; + updateColor('background_color_pick', 'background_color'); + f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true); + selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true); + selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true); + selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0))); + selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true); + selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1))); + + // Setup block fields + + selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true); + selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing)); + selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true); + selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing)); + selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true); + selectByValue(f, 'block_text_align', ce.style.textAlign, true, true); + f.block_text_indent.value = getNum(ce.style.textIndent); + selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent)); + selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true); + selectByValue(f, 'block_display', ce.style.display, true, true); + + // Setup box fields + + f.box_width.value = getNum(ce.style.width); + selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width)); + + f.box_height.value = getNum(ce.style.height); + selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height)); + + if (tinyMCE.isGecko) + selectByValue(f, 'box_float', ce.style.cssFloat, true, true); + else + selectByValue(f, 'box_float', ce.style.styleFloat, true, true); + + selectByValue(f, 'box_clear', ce.style.clear, true, true); + + setupBox(f, ce, 'box_padding', 'padding', ''); + setupBox(f, ce, 'box_margin', 'margin', ''); + + // Setup border fields + + setupBox(f, ce, 'border_style', 'border', 'Style'); + setupBox(f, ce, 'border_width', 'border', 'Width'); + setupBox(f, ce, 'border_color', 'border', 'Color'); + + updateColor('border_color_top_pick', 'border_color_top'); + updateColor('border_color_right_pick', 'border_color_right'); + updateColor('border_color_bottom_pick', 'border_color_bottom'); + updateColor('border_color_left_pick', 'border_color_left'); + + // Setup list fields + + selectByValue(f, 'list_type', ce.style.listStyleType, true, true); + selectByValue(f, 'list_position', ce.style.listStylePosition, true, true); + f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1"); + + // Setup box fields + + selectByValue(f, 'positioning_type', ce.style.position, true, true); + selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true); + selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true); + f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : ""; + + f.positioning_width.value = getNum(ce.style.width); + selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width)); + + f.positioning_height.value = getNum(ce.style.height); + selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height)); + + setupBox(f, ce, 'positioning_placement', '', '', new Array('top', 'right', 'bottom', 'left')); + + s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1"); + s = s.replace(/,/g, ' '); + + if (!hasEqualValues(new Array(getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)))) { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = getNum(getVal(s, 1)); + selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1))); + f.positioning_clip_bottom.value = getNum(getVal(s, 2)); + selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2))); + f.positioning_clip_left.value = getNum(getVal(s, 3)); + selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3))); + } else { + f.positioning_clip_top.value = getNum(getVal(s, 0)); + selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0))); + f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value; + } + +// setupBox(f, ce, '', 'border', 'Color'); +} + +function getMeasurement(s) { + return s.replace(/^([0-9]+)(.*)$/, "$2"); +} + +function getNum(s) { + if (new RegExp('^[0-9]+[a-z%]+$', 'gi').test(s)) + return s.replace(/[^0-9]/g, ''); + + return s; +} + +function inStr(s, n) { + return new RegExp(n, 'gi').test(s); +} + +function getVal(s, i) { + var a = tinyMCE.explode(' ', s); + + if (a.length > 1) + return a[i]; + + return ""; +} + +function setValue(f, n, v) { + if (f.elements[n].type == "text") + f.elements[n].value = v; + else + selectByValue(f, n, v, true, true); +} + +function setupBox(f, ce, fp, pr, sf, b) { + if (typeof(b) == "undefined") + b = new Array('Top', 'Right', 'Bottom', 'Left'); + + if (isSame(ce, pr, sf, b)) { + f.elements[fp + "_same"].checked = true; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + f.elements[fp + "_right"].value = ""; + f.elements[fp + "_right"].disabled = true; + f.elements[fp + "_bottom"].value = ""; + f.elements[fp + "_bottom"].disabled = true; + f.elements[fp + "_left"].value = ""; + f.elements[fp + "_left"].disabled = true; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + f.elements[fp + "_left_measurement"].disabled = true; + f.elements[fp + "_bottom_measurement"].disabled = true; + f.elements[fp + "_right_measurement"].disabled = true; + } + } else { + f.elements[fp + "_same"].checked = false; + + setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf])); + f.elements[fp + "_top"].disabled = false; + + setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf])); + f.elements[fp + "_right"].disabled = false; + + setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf])); + f.elements[fp + "_bottom"].disabled = false; + + setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left"].disabled = false; + + if (f.elements[fp + "_top_measurement"]) { + selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf])); + selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf])); + selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf])); + selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf])); + f.elements[fp + "_left_measurement"].disabled = false; + f.elements[fp + "_bottom_measurement"].disabled = false; + f.elements[fp + "_right_measurement"].disabled = false; + } + } +} + +function isSame(e, pr, sf, b) { + var a = new Array(), i, x; + + if (typeof(b) == "undefined") + b = new Array('Top', 'Right', 'Bottom', 'Left'); + + if (typeof(sf) == "undefined" || sf == null) + sf = ""; + + a[0] = e.style[pr + b[0] + sf]; + a[1] = e.style[pr + b[1] + sf]; + a[2] = e.style[pr + b[2] + sf]; + a[3] = e.style[pr + b[3] + sf]; + + for (i=0; i 0 ? s.substring(1) : s; + + if (f.text_none.checked) + s = "none"; + + ce.style.textDecoration = s; + + // Build background styles + + ce.style.backgroundColor = f.background_color.value; + ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : ""; + ce.style.backgroundRepeat = f.background_repeat.value; + ce.style.backgroundAttachment = f.background_attachment.value; + + if (f.background_hpos.value != "") { + s = ""; + s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " "; + s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : ""); + ce.style.backgroundPosition = s; + } + + // Build block styles + + ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : ""); + ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : ""); + ce.style.verticalAlign = f.block_vertical_alignment.value; + ce.style.textAlign = f.block_text_align.value; + ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : ""); + ce.style.whiteSpace = f.block_whitespace.value; + ce.style.display = f.block_display.value; + + // Build box styles + + ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : ""); + ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : ""); + ce.style.styleFloat = f.box_float.value; + + if (tinyMCE.isGecko) + ce.style.cssFloat = f.box_float.value; + + ce.style.clear = f.box_clear.value; + + if (!f.box_padding_same.checked) { + ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : ""); + ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : ""); + ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : ""); + } else + ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : ""); + + if (!f.box_margin_same.checked) { + ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : ""); + ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : ""); + ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : ""); + } else + ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : ""); + + // Build border styles + + if (!f.border_style_same.checked) { + ce.style.borderTopStyle = f.border_style_top.value; + ce.style.borderRightStyle = f.border_style_right.value; + ce.style.borderBottomStyle = f.border_style_bottom.value; + ce.style.borderLeftStyle = f.border_style_left.value; + } else + ce.style.borderStyle = f.border_style_top.value; + + if (!f.border_width_same.checked) { + ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : ""); + ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : ""); + ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : ""); + ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : ""); + } else + ce.style.borderWidth = f.border_width_top.value; + + if (!f.border_color_same.checked) { + ce.style.borderTopColor = f.border_color_top.value; + ce.style.borderRightColor = f.border_color_right.value; + ce.style.borderBottomColor = f.border_color_bottom.value; + ce.style.borderLeftColor = f.border_color_left.value; + } else + ce.style.borderColor = f.border_color_top.value; + + // Build list styles + + ce.style.listStyleType = f.list_type.value; + ce.style.listStylePosition = f.list_position.value; + ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : ""; + + // Build positioning styles + + ce.style.position = f.positioning_type.value; + ce.style.visibility = f.positioning_visibility.value; + + if (ce.style.width == "") + ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : ""); + + if (ce.style.height == "") + ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : ""); + + ce.style.zIndex = f.positioning_zindex.value; + ce.style.overflow = f.positioning_overflow.value; + + if (!f.positioning_placement_same.checked) { + ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : ""); + ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : ""); + ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : ""); + } else { + s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : ""); + ce.style.top = s; + ce.style.right = s; + ce.style.bottom = s; + ce.style.left = s; + } + + if (!f.positioning_clip_same.checked) { + s = "rect("; + s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " "; + s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto"); + s += ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } else { + s = "rect("; + t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto"; + s += t + " "; + s += t + " "; + s += t + " "; + s += t + ")"; + + if (s != "rect(auto auto auto auto)") + ce.style.clip = s; + } + + ce.style.cssText = tinyMCE.serializeStyle(tinyMCE.parseStyle(ce.style.cssText)); +} + +function isNum(s) { + return new RegExp('[0-9]+', 'g').test(s); +} + +function showDisabledControls() { + var f = document.forms, i, a; + + for (i=0; i 1) { + addSelectValue(f, s, p[0], p[1]); + + if (se) + selectByValue(f, s, p[1]); + } else { + addSelectValue(f, s, p[0], p[0]); + + if (se) + selectByValue(f, s, p[0]); + } + } +} + +function toggleSame(ce, pre) { + var el = document.forms[0].elements, i; + + if (ce.checked) { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = true; + el[pre + "_bottom"].disabled = true; + el[pre + "_left"].disabled = true; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = true; + el[pre + "_bottom_measurement"].disabled = true; + el[pre + "_left_measurement"].disabled = true; + } + } else { + el[pre + "_top"].disabled = false; + el[pre + "_right"].disabled = false; + el[pre + "_bottom"].disabled = false; + el[pre + "_left"].disabled = false; + + if (el[pre + "_top_measurement"]) { + el[pre + "_top_measurement"].disabled = false; + el[pre + "_right_measurement"].disabled = false; + el[pre + "_bottom_measurement"].disabled = false; + el[pre + "_left_measurement"].disabled = false; + } + } + + showDisabledControls(); +} + +function synch(fr, to) { + var f = document.forms[0]; + + f.elements[to].value = f.elements[fr].value; + + if (f.elements[fr + "_measurement"]) + selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value); +} diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/de.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/de.js new file mode 100755 index 000000000..2a1416dab --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/de.js @@ -0,0 +1,60 @@ +// UK lang variables + +tinyMCE.addToLang('style',{ +title : 'CSS Stil editieren', +styleinfo_desc : 'CSS Stil editieren', +text_tab : 'Text', +background_tab : 'Hintergrund', +block_tab : 'Block', +box_tab : 'Box', +border_tab : 'Rahmen', +list_tab : 'Liste', +positioning_tab : 'Positionierung', +text_props : 'Text', +text_font : 'Schriftart', +text_size : 'Grösse', +text_weight : 'Dicke', +text_style : 'Stil', +text_variant : 'Variante', +text_lineheight : 'Linienhöhe', +text_case : 'Gross-/Kleinbuchstaben', +text_color : 'Farbe', +text_decoration : 'Dekoration', +background_color : 'Hintergrundfarbe', +background_image : 'Hintergrundfoto', +background_repeat : 'Wiederholen', +background_attachment : 'Anhang', +background_hpos : 'Horizontale Position', +background_vpos : 'Vertikale Position', +block_wordspacing : 'Wortabstand', +block_letterspacing : 'Zeichenabstand', +block_vertical_alignment : 'Vertikale Ausrichtung', +block_text_align : 'Horizontale Ausrichtung', +block_text_indent : 'Texteinrückung', +block_whitespace : 'Textumbruch', +block_display : 'Anzeigeart', +box_width : 'Breite', +box_height : 'Höhe', +box_float : 'Text umfliessen', +box_clear : 'Text umfliessen beenden', +padding : 'Innenabstand', +same : 'Das gleiche für alle', +top : 'Oben', +right : 'Rechts', +bottom : 'Unten', +left : 'Links', +margin : 'Aussenabstand', +style : 'Stil', +width : 'Breite', +height : 'Höhe', +color : 'Farbe', +list_type : 'Listentyp', +bullet_image : 'Grafik', +position : 'Position', +positioning_type : 'Typ', +visibility : 'Sichtbarkeit', +zindex : 'Z-index', +overflow : 'Überfluss', +placement : 'Plazierung', +clip : 'Abschneiden' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/en.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/en.js new file mode 100755 index 000000000..6bed70f72 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/en.js @@ -0,0 +1,66 @@ +// UK lang variables + +tinyMCE.addToLang('style',{ +title : 'Edit CSS Style', +styleinfo_desc : 'Edit CSS Style', +apply : 'Apply', +text_tab : 'Text', +background_tab : 'Background', +block_tab : 'Block', +box_tab : 'Box', +border_tab : 'Border', +list_tab : 'List', +positioning_tab : 'Positioning', +text_props : 'Text', +text_font : 'Font', +text_size : 'Size', +text_weight : 'Weight', +text_style : 'Style', +text_variant : 'Variant', +text_lineheight : 'Line height', +text_case : 'Case', +text_color : 'Color', +text_decoration : 'Decoration', +text_overline : 'overline', +text_underline : 'underline', +text_striketrough : 'strikethrough', +text_blink : 'blink', +text_none : 'none', +background_color : 'Background color', +background_image : 'Background image', +background_repeat : 'Repeat', +background_attachment : 'Attachment', +background_hpos : 'Horizontal position', +background_vpos : 'Vertical position', +block_wordspacing : 'Word spacing', +block_letterspacing : 'Letter spacing', +block_vertical_alignment : 'Vertical alignment', +block_text_align : 'Text align', +block_text_indent : 'Text indent', +block_whitespace : 'Whitespace', +block_display : 'Display', +box_width : 'Width', +box_height : 'Height', +box_float : 'Float', +box_clear : 'Clear', +padding : 'Padding', +same : 'Same for all', +top : 'Top', +right : 'Right', +bottom : 'Bottom', +left : 'Left', +margin : 'Margin', +style : 'Style', +width : 'Width', +height : 'Height', +color : 'Color', +list_type : 'Type', +bullet_image : 'Bullet image', +position : 'Position', +positioning_type : 'Type', +visibility : 'Visibility', +zindex : 'Z-index', +overflow : 'Overflow', +placement : 'Placement', +clip : 'Clip' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/fi.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/fi.js new file mode 100755 index 000000000..b4ddf80ad --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/fi.js @@ -0,0 +1,66 @@ +// FI lang variables + +tinyMCE.addToLang('style',{ +title : 'Muokkaa CSS tyyliä', +styleinfo_desc : 'Muokkaa CSS tyyliä', +apply : 'Päivitä', +text_tab : 'Teksti', +background_tab : 'Tausta', +block_tab : 'Lohko', +box_tab : 'Laatikko', +border_tab : 'Reunaviiva', +list_tab : 'Lista', +positioning_tab : 'Asettelu', +text_props : 'Teksti', +text_font : 'Kirjasin', +text_size : 'Koko', +text_weight : 'Lihavointi', +text_style : 'Tyyli', +text_variant : 'Variantti', +text_lineheight : 'Rivikorkeus', +text_case : 'Isot/pienet kirjaimet', +text_color : 'Väri', +text_decoration : 'Koristelu', +text_overline : 'ylleviivaus', +text_underline : 'alleviivaus', +text_striketrough : 'yliviivaus', +text_blink : 'vilkkuva', +text_none : 'ei mitään', +background_color : 'Taustaväri', +background_image : 'Taustakuva', +background_repeat : 'Toisto', +background_attachment : 'Kiinnitys', +background_hpos : 'Vaakasijoitus', +background_vpos : 'Pystysijoitus', +block_wordspacing : 'Sanavälitys', +block_letterspacing : 'Kirjainvälitys', +block_vertical_alignment : 'Pystyasettelu', +block_text_align : 'Tekstin tasaus', +block_text_indent : 'Tekstin sisennys', +block_whitespace : 'Rivitys', +block_display : 'Näyttötapa', +box_width : 'Leveys', +box_height : 'Korkeus', +box_float : 'Float', +box_clear : 'Clear', +padding : 'Täyte', +same : 'Sama kaikille', +top : 'Ylä', +right : 'Oikea', +bottom : 'Ala', +left : 'Vasen', +margin : 'Marginaali', +style : 'Tyyli', +width : 'Leveys', +height : 'Korkeus', +color : 'Väri', +list_type : 'Tyyppi', +bullet_image : 'Luettelokuva', +position : 'Paikka', +positioning_type : 'Tyyppi', +visibility : 'Näkyvyys', +zindex : 'Z-indeksi', +overflow : 'Overflow', +placement : 'Asettelu', +clip : 'Clip' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/fr.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/fr.js new file mode 100755 index 000000000..2da3d1f6f --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/fr.js @@ -0,0 +1,66 @@ +// FR lang variables + +tinyMCE.addToLang('style',{ +title : 'Edtiteur de style CSS', +styleinfo_desc : 'Edtiteur de style CSS', +apply : 'Appliquer', +text_tab : 'Texte', +background_tab : 'Fond', +block_tab : 'Bloc', +box_tab : 'Boite', +border_tab : 'Bord', +list_tab : 'Liste', +positioning_tab : 'Positionnement', +text_props : 'Texte', +text_font : 'Fonte', +text_size : 'Taille', +text_weight : 'Poid', +text_style : 'Style', +text_variant : 'Variant', +text_lineheight : 'Hauteur de ligne', +text_case : 'Casse', +text_color : 'Couleur', +text_decoration : 'Décoration', +text_overline : 'surligné', +text_underline : 'souligné', +text_striketrough : 'barré', +text_blink : 'clignotant', +text_none : 'aucun', +background_color : 'Couleur de fond', +background_image : 'Image de fond', +background_repeat : 'Répéter', +background_attachment : 'Attacher', +background_hpos : 'Position horizontal', +background_vpos : 'Position vertical', +block_wordspacing : 'Espace entre les mots', +block_letterspacing : 'Espace entre les lettres', +block_vertical_alignment : 'Aligenement vertical', +block_text_align : 'Aligement du texte', +block_text_indent : 'Indentation du texte', +block_whitespace : 'Espace', +block_display : 'Afficher', +box_width : 'Largeur', +box_height : 'Hauteur', +box_float : 'Float', +box_clear : 'Clear', +padding : 'Padding', +same : 'Identique pour tous', +top : 'Haut', +right : 'Droite', +bottom : 'Bas', +left : 'Gauche', +margin : 'Marge', +style : 'Style', +width : 'Largeur', +height : 'Hauteur', +color : 'Couleur', +list_type : 'Type', +bullet_image : 'Bullet image', +position : 'Position', +positioning_type : 'Type', +visibility : 'Visibilité', +zindex : 'Z-index', +overflow : 'Overflow', +placement : 'Placement', +clip : 'Clip' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/it.js b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/it.js new file mode 100755 index 000000000..3540c909c --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/langs/it.js @@ -0,0 +1,60 @@ +// IT lang variables + +tinyMCE.addToLang('style',{ +title : 'Modifica stile CSS', +styleinfo_desc : 'Modifica stile CSS', +text_tab : 'Testo', +background_tab : 'Sfondo', +block_tab : 'Blocco', +box_tab : 'Box', +border_tab : 'Bordo', +list_tab : 'Lista', +positioning_tab : 'Posizionamento', +text_props : 'Testo', +text_font : 'Font', +text_size : 'Dimensione', +text_weight : 'Peso', +text_style : 'Stile', +text_variant : 'Variante', +text_lineheight : 'Altezza linea', +text_case : 'Caso', +text_color : 'Colore', +text_decoration : 'Decorazione', +background_color : 'Colore di sfondo', +background_image : 'Immagine di sfondo', +background_repeat : 'Ripeti', +background_attachment : 'Ancoraggio', +background_hpos : 'Posizione orizzontale', +background_vpos : 'Posizione verticale', +block_wordspacing : 'Spaziatura parole', +block_letterspacing : 'Spaziatura lettere', +block_vertical_alignment : 'Allineamento verticale', +block_text_align : 'Allineamento del testo', +block_text_indent : 'Indentazione del testo', +block_whitespace : 'Whitespace', +block_display : 'Display', +box_width : 'Larghezza', +box_height : 'Altezza', +box_float : 'Float', +box_clear : 'Clear', +padding : 'Spaziatura interna', +same : 'Uguale per tutti', +top : 'Alto', +right : 'Destra', +bottom : 'Basso', +left : 'Sinistra', +margin : 'Margine esterno', +style : 'Stile', +width : 'Larghezza', +height : 'Altezza', +color : 'Colore', +list_type : 'Tipo', +bullet_image : 'Immagine punto elenco', +position : 'Posizionamento', +positioning_type : 'Tipo', +visibility : 'Visibilità', +zindex : 'Z-index', +overflow : 'Overflow', +placement : 'Piazzamento', +clip : 'Clip' +}); diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/props.htm b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/props.htm new file mode 100644 index 000000000..cd2788236 --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/props.htm @@ -0,0 +1,580 @@ + + + {$lang_style_title} + + + + + + + + + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
  +
+
+ +
+ + + +
+
+ +   +
+
+ +
+ + + + + +
 
+
{$lang_style_text_decoration} + + + + + + +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
 
+
+ +
  +
+
+ +
  +
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
  +
+
+ +
  +
+
+ +
  +
+
+
+ +
+ + + + + + + + + + + + + + +
+ +
  +
+
   
+ +
  +
+
   
+
+
+ {$lang_style_padding} + + + + + + + + + + + + + + + + + + + + + + +
 
+ +
  +
+
+ +
  +
+
+ +
  +
+
+ +
  +
+
+
+
+
+
+ {$lang_style_margin} + + + + + + + + + + + + + + + + + + + + + + +
 
+ +
  +
+
+ +
  +
+
+ +
  +
+
+ +
  +
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  {$lang_style_style} {$lang_style_width} {$lang_style_color}
      
{$lang_style_top}   + + +
  +
+
  + + + + +
 
+
{$lang_style_right}   + + +
  +
+
  + + + + +
 
+
{$lang_style_bottom}   + + +
  +
+
  + + + + +
 
+
{$lang_style_left}   + + +
  +
+
  + + + + +
 
+
+
+ +
+ + + + + + + + + + + + + + + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + +
   
+ +
  +
+
   
+ +
  +
+
   
+ +
+
+ {$lang_style_placement} + + + + + + + + + + + + + + + + + + + + + + +
 
{$lang_style_top} + +
  +
+
{$lang_style_right} + +
  +
+
{$lang_style_bottom} + +
  +
+
{$lang_style_left} + +
  +
+
+
+
+
+
+ {$lang_style_clip} + + + + + + + + + + + + + + + + + + + + + + +
 
{$lang_style_top} + +
  +
+
{$lang_style_right} + +
  +
+
{$lang_style_bottom} + +
  +
+
{$lang_style_left} + +
  +
+
+
+
+
+
+
+ +
+
+
+
 
+
+
+ +
+ +
+
+
+ +
+
+
+ + diff --git a/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/readme.txt b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/readme.txt new file mode 100644 index 000000000..4fdb78aec --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/plugins/style/readme.txt @@ -0,0 +1 @@ +Check the TinyMCE documentation for details on this plugin. diff --git a/www/extras/tinymce2/jscripts/tiny_mce/utils/editable_selects.js b/www/extras/tinymce2/jscripts/tiny_mce/utils/editable_selects.js new file mode 100644 index 000000000..81c99eb5c --- /dev/null +++ b/www/extras/tinymce2/jscripts/tiny_mce/utils/editable_selects.js @@ -0,0 +1,63 @@ +/** + * $RCSfile: editable_selects.js,v $ + * $Revision: 1.1 $ + * $Date: 2006/04/10 09:30:19 $ + * + * Makes select boxes editable. + * + * @author Moxiecode + * @copyright Copyright © 2004-2006, Moxiecode Systems AB, All rights reserved. + */ + +var TinyMCE_EditableSelects = { + editSelectElm : null, + + init : function() { + var nl = document.getElementsByTagName("select"), i, d = document, o; + + for (i=0; i